ssh: Could not resolve hostname [hostname]: nodename nor servname provided, or not known
Categories:
Troubleshooting 'ssh: Could not resolve hostname': A Comprehensive Guide

Learn to diagnose and fix the common SSH error 'Could not resolve hostname' by understanding DNS, network configuration, and SSH client settings.
The error message ssh: Could not resolve hostname [hostname]: nodename nor servname provided, or not known is a common frustration for anyone using SSH. It indicates that your system cannot translate the hostname you provided into an IP address. This problem is almost always related to network configuration, specifically how your system handles Domain Name System (DNS) lookups. This article will guide you through the common causes and solutions for this error, ensuring your SSH connections are successful.
Understanding Hostname Resolution
Before diving into solutions, it's crucial to understand how hostname resolution works. When you type a hostname (e.g., example.com or my-server) into an SSH command, your operating system needs to find its corresponding IP address. This process typically involves several steps:
/etc/hostsfile: The system first checks its local hosts file (/etc/hostson Linux/macOS,C:\Windows\System32\drivers\etc\hostson Windows) for a direct mapping of the hostname to an IP address.- DNS Resolver: If the hostname isn't found in the hosts file, the system queries a DNS server. The DNS server is responsible for maintaining a directory of domain names and translating them to IP addresses.
- Network Configuration: The IP addresses of the DNS servers your system should use are typically configured in your network settings, often found in
/etc/resolv.confon Linux systems or through your network adapter settings on other operating systems.
flowchart TD
A[SSH Client] --> B{"Resolve Hostname?"}
B -->|Yes| C[Check /etc/hosts]
C -->|Found?| D[Connect to IP]
C -->|Not Found| E[Query DNS Server]
E -->|Resolved?| D
E -->|Not Resolved| F["Error: Could not resolve hostname"]
D[Connect to IP] --> G[SSH Connection Established]
F --> H[Troubleshoot DNS/Network]Flowchart of Hostname Resolution Process for SSH
Common Causes and Solutions
The 'Could not resolve hostname' error can stem from several issues, ranging from simple typos to complex network misconfigurations. Here are the most common causes and their respective solutions.
1. Incorrect Hostname or Typo
This is the simplest and most common cause. If the hostname is misspelled or doesn't exist, your system won't be able to resolve it.
Solution: Carefully verify the hostname. If you're connecting to a server by its short name (e.g., my-server), ensure that name is correctly configured in your local /etc/hosts file or that your DNS server knows about it. If it's a fully qualified domain name (FQDN) like server.example.com, ensure it's spelled correctly.
2. DNS Server Issues
Your system relies on DNS servers to translate hostnames. If these servers are unreachable, misconfigured, or not functioning correctly, resolution will fail.
Solution:
- Check
/etc/resolv.conf(Linux/macOS): This file lists the DNS servers your system uses. Ensure thenameserverentries are correct and reachable. You can try public DNS servers like Google's (8.8.8.8, 8.8.4.4) or Cloudflare's (1.1.1.1). - Test DNS resolution: Use tools like
ping,nslookup, ordigto test if you can resolve other known hostnames (e.g.,ping google.com). If these also fail, your DNS configuration is likely the problem. - Network Manager: If you're using a desktop environment, your network manager might be overriding
/etc/resolv.conf. Check your GUI network settings.
cat /etc/resolv.conf
# Example output:
# nameserver 127.0.0.53
# options edns0 trust-ad
# search mydomain.local
# To test a specific DNS server:
nslookup example.com 8.8.8.8
# To ping a known domain:
ping -c 4 google.com
Checking DNS configuration and testing resolution
3. Local Hosts File Misconfiguration
The /etc/hosts file provides a local, static mapping of hostnames to IP addresses. If you're trying to connect to a hostname defined here, and the entry is incorrect or missing, you'll get this error.
Solution: Open /etc/hosts with a text editor (you'll need root privileges) and verify or add the correct entry. For example, if your server my-server has IP 192.168.1.100, you'd add:
192.168.1.100 my-server
sudo nano /etc/hosts
# Example entry to add:
# 192.168.1.100 my-server.local my-server
Editing the /etc/hosts file
4. Network Connectivity Issues
While less direct, if your machine has no network connectivity at all, it won't be able to reach any DNS servers, leading to this error.
Solution:
- Check network cable/Wi-Fi: Ensure your network connection is active.
- Ping your gateway: Try
pinging your router's IP address (e.g.,ping 192.168.1.1). If this fails, the issue is with your local network connection. - Check firewall: A local firewall might be blocking DNS queries (port 53 UDP/TCP). Temporarily disable it to test if it's the culprit.
5. SSH Client Configuration
Occasionally, SSH client configurations in ~/.ssh/config can cause issues if they contain incorrect hostnames or proxy settings that interfere with resolution.
Solution: Review your ~/.ssh/config file for any Host entries that might be misconfigured. Pay attention to Hostname directives and ProxyCommand settings. If you suspect a configuration issue, try connecting without using the config file (e.g., ssh -F /dev/null user@hostname).
cat ~/.ssh/config
# Example of a potentially problematic entry:
# Host my-server
# Hostname wrong.hostname.com
# User myuser
# To bypass the config file for a test:
ssh -F /dev/null user@correct-hostname.com
Reviewing SSH client configuration
/etc/hosts or /etc/resolv.conf, always make a backup first. Incorrect changes can disrupt your network connectivity.1. Verify Hostname Accuracy
Double-check the hostname you are trying to connect to for any typos. Ensure it's the correct name or IP address.
2. Check Local Hosts File
Inspect /etc/hosts (Linux/macOS) or C:\Windows\System32\drivers\etc\hosts (Windows) for a correct entry for your target hostname. Add or correct it if necessary.
3. Test DNS Resolution
Use ping google.com, nslookup example.com, or dig example.com to confirm your system can resolve public hostnames. If not, investigate your DNS server configuration.
4. Review DNS Server Configuration
Examine /etc/resolv.conf (Linux/macOS) for valid nameserver entries. Consider temporarily using public DNS servers like 8.8.8.8 or 1.1.1.1 to rule out your current DNS server as the issue.
5. Check Network Connectivity
Ensure your machine has active network access by pinging your local gateway or another known IP address on your network.
6. Inspect SSH Client Configuration
Look for any conflicting or incorrect Hostname or ProxyCommand directives in your ~/.ssh/config file that might be interfering with resolution.