"ssh: Could not resolve hostname": causas y cómo solucionarlo

SSH no pudo convertir el nombre que escribiste en una dirección IP, así que no se intentó ninguna conexión y el servidor no interviene. Los motivos habituales son una errata, un alias que falta en ~/.ssh/config, un puerto escrito como host:22 o un problema de DNS. Ejecuta ssh -G name | grep '^hostname ' para ver qué nombre busca SSH y prueba ese nombre con el resolvedor de tu sistema.

Actualizada el . Mensajes reproducidos con OpenSSH 10.3 en macOS y OpenSSH 10.0 en Debian 13, incluido un contenedor sin red.

El mensaje en cada sistema

La primera parte viene de SSH. La parte posterior a los dos puntos viene del resolvedor de tu sistema.

ssh: Could not resolve hostname server: nodename nor servname provided, or not known

Ese es macOS. En Linux el mismo fallo se lee:

ssh: Could not resolve hostname server: Name or service not known

Linux tiene además una tercera forma, habitual cuando la red o el servidor DNS están caídos:

ssh: Could not resolve hostname server: Temporary failure in name resolution

La palabra entre hostname y los dos puntos es exactamente lo que SSH intentó buscar. Léela primero, porque a menudo delata el error.

Causa 1: una errata, o un alias que SSH no ve

ssh -G server | grep -E '^(hostname|port|user) '

Esto muestra lo que SSH usaría, sin conectar. Si esperabas un alias de tu configuración y hostname solo repite lo que escribiste, es que ningún bloque Host coincidió. Comprueba esto:

  • El alias está escrito igual en ~/.ssh/config.
  • El bloque tiene una línea HostName, y esa línea no tiene erratas. Un valor equivocado ahí aparece en el error en lugar del alias.
  • Eres el mismo usuario. sudo ssh server lee la configuración de root, no la tuya.

Cómo coinciden los alias y los bloques Host se explica en los ejemplos del archivo ssh config.

Causa 2: el puerto o una URL forman parte del nombre

SSH no interpreta host:port ni una dirección web. Estos dos fallan con el mismo error, y el error muestra toda la cadena como nombre:

ssh user@example.com:22
ssh https://example.com
ssh: Could not resolve hostname example.com:22: nodename nor servname provided, or not known

Usa una de estas formas:

ssh -p 2222 user@example.com
ssh ssh://user@example.com:2222

Un espacio suelto da un mensaje distinto, hostname contains invalid characters. Busca espacios o saltos de línea pegados.

Causa 3: DNS

Comprueba el nombre fuera de SSH, con el resolvedor que usa SSH.

En macOS:

dscacheutil -q host -a name example.com

En Linux:

getent hosts example.com

Una salida vacía significa que esta máquina no puede resolver el nombre. Entonces pregunta directamente a un resolvedor público:

dig +short example.com @1.1.1.1
  • Una respuesta del resolvedor público pero no de tu sistema: el fallo está en tu configuración o caché de DNS local. Vacíala, en macOS con sudo dscacheutil -flushcache; sudo killall -HUP mDNSResponder y en Linux con systemd con resolvectl flush-caches, o cambia de servidor DNS.
  • Ninguna respuesta en ningún sitio: el registro no existe. Puede ser un registro nuevo que aún no se ha propagado, uno eliminado, o una errata en la zona.

Para un nombre que solo usas tú, como un equipo en casa, puedes saltarte el DNS: añade una línea a /etc/hosts, o pon la dirección en la línea HostName de tu ~/.ssh/config.

Para ponerte a trabajar mientras arreglas el DNS, conéctate por dirección. Ten en cuenta que la clave de host se guarda por nombre, así que SSH puede pedirte que la confirmes de nuevo:

ssh user@203.0.113.10

Causa 4: un nombre que existe solo en una red privada

Los nombres de empresa, los nombres .internal y los nombres MagicDNS de Tailscale se resuelven solo mientras estás en esa red. Si ayer funcionaba, comprueba que la VPN está activa y que configuró su servidor DNS.

Los nombres que acaban en .local dependen de mDNS. macOS los gestiona de serie. En Linux suelen necesitar Avahi y mdns4_minimal en /etc/nsswitch.conf. Las redes Wi-Fi de invitados suelen bloquear mDNS entre dispositivos.

Causa 5: sin red

Temporary failure in name resolution suele significar que el sistema no pudo llegar a ningún servidor DNS. Compruébalo con una dirección que no necesite nombre:

ping -c 1 1.1.1.1

En un servidor o contenedor Linux, mira también /etc/resolv.conf.

Preguntas

¿Qué significa "nodename nor servname provided, or not known"?

Es la forma en que macOS indica que no pudo resolver un nombre. SSH no encontró ninguna dirección IP para ese nombre: revisa cómo está escrito, el alias en ~/.ssh/config y tu DNS.

¿Puedo poner el puerto tras dos puntos en ssh?

No. ssh lee host:22 como parte del nombre. Usa ssh -p 22 usuario@host, o la forma ssh://usuario@host:22.

¿Por qué falla solo con sudo?

sudo ssh lee el ~/.ssh/config de root, no el tuyo, así que allí tus alias no existen. Ejecuta ssh sin sudo.

Fuentes

Más en Mensajes de error

Todas las guías