Connection timed out en SSH significa que el cliente envió la petición al puerto TCP 22 y nadie respondió antes de agotar la espera. Casi siempre es un firewall que descarta paquetes (ufw o un grupo de seguridad), un puerto distinto del 22 o una IP que ha cambiado. Se aísla en minutos con nc -zv host 22.

Connection timed out frente a Connection refused en SSH: qué indica cada error

Connection refused aparece cuando el paquete llega al servidor y nada escucha en ese puerto: el sistema contesta con un rechazo inmediato. Connection timed out es silencio: el paquete se pierde por el camino o un firewall lo descarta sin responder. Distinguir ambos mensajes ahorra la mitad del diagnóstico.

  • Connection refused: sshd parado, escuchando en otro puerto o un firewall configurado para rechazar en lugar de descartar.
  • Connection timed out: firewall que descarta, grupo de seguridad sin regla de entrada, IP equivocada, máquina apagada o red que bloquea la salida al puerto 22.
  • No route to host: problema de enrutamiento o equipo inalcanzable en la red local.

5 pasos para diagnosticar Connection timed out en SSH

El orden correcto va de lo más rápido de comprobar a lo que obliga a abrir la consola del proveedor:

  1. Confirma la dirección. Resuelve el nombre con dig +short host y compárala con la IP que muestra el panel del proveedor.
  2. Prueba el puerto con nc. nc -zv host 22 indica si algo escucha sin pasar por la autenticación SSH.
  3. Cambia de red. Si conecta con datos móviles y no con la wifi, esa red bloquea la salida al puerto 22.
  4. Revisa el firewall del sistema. Desde la consola web del proveedor, sudo ufw status verbose muestra si 22/tcp está permitido.
  5. Revisa el grupo de seguridad. La regla de entrada debe aceptar TCP 22 desde tu IP actual, no desde la que tenías ayer.

nc -zv host 22: comprobar el puerto SSH sin autenticarse

nc con -z abre una conexión TCP al puerto indicado y la cierra sin enviar datos; -v informa del resultado y -w limita la espera en segundos. Es la forma más limpia de separar un problema de red de uno de SSH.

nc -zv -w 5 servidor.ejemplo.com 22
nc -zv -w 5 203.0.113.10 2222
ssh -v -o ConnectTimeout=10 -p 22 [email protected]

Si nc devuelve succeeded u open (depende de la variante instalada), el puerto es accesible y el fallo está en SSH: usuario, claves o configuración. Si se queda colgado hasta agotar el tiempo, el bloqueo es de red. Con ssh -v verás la línea Connecting to ... port 22; si nunca llega Connection established, no tiene sentido revisar claves ni permisos. Las opciones exactas están en la página de manual de nc.

OpenSSH escucha por defecto en el puerto TCP 22. Si alguien cambió Port en sshd_config, apuntar al 22 dará timeout o refused según lo que haga el firewall con ese puerto; usa -p o la directiva Port en ~/.ssh/config.

ufw status y grupos de seguridad: los dos firewalls que bloquean SSH

Un servidor en la nube tiene normalmente dos filtros: el firewall del sistema, como ufw en Ubuntu, y el grupo de seguridad o firewall de red del proveedor. Basta con que uno descarte el paquete para que SSH termine en timeout. Comprueba el primero desde la consola web del proveedor, no desde otra sesión SSH que dependa de la misma regla:

sudo ufw status verbose
sudo ufw allow 22/tcp
sudo ufw allow 60000:61000/udp
sudo ss -tlnp | grep sshd

ufw status verbose muestra la política por defecto de entrada y las reglas activas; si la entrada es deny y no hay regla para 22/tcp, ahí está el timeout. ss -tlnp confirma en qué dirección y puerto escucha sshd. La regla UDP solo hace falta si usas Mosh, que trabaja por defecto en los puertos 60000-61000.

En el grupo de seguridad, revisa las reglas de entrada: debe existir una para TCP 22 cuyo origen incluya tu IP pública actual. Restringir el origen a una sola dirección es buena práctica, pero también es la causa más habitual de timeout cuando te conectas desde otra red.

IP cambiada: cuando el servidor SSH o tu móvil tienen otra dirección

Una IP cambiada produce un Connection timed out idéntico al de un firewall, y el cambio puede darse en cualquiera de los dos extremos.

  • Lado servidor: una instancia que se detiene y arranca sin IP fija puede recibir otra dirección. Revisa el registro DNS con dig +short servidor.ejemplo.com y el HostName de tu ~/.ssh/config.
  • Lado cliente: si el grupo de seguridad solo admite la IP de la oficina, desde datos móviles o la wifi de un hotel llegas con otra dirección y el paquete se descarta.

Para equipos sin IP pública o sin puertos expuestos, una red privada en malla evita perseguir direcciones: el servidor se alcanza por su IP dentro de la malla sin abrir el 22 a internet. Dos opciones son la red privada en malla Prialo y Tailscale.

Connection timed out en SSH desde iOS y Android: qué cambia frente al escritorio

En el móvil la red cambia constantemente, así que la IP cambiada y las redes que bloquean el puerto 22 aparecen más a menudo que en un portátil con cable.

Qué se compruebaEscritorio (Linux/macOS)iOS/Android
Probar el puerto con ncnc -zv en la terminal localnc -zv desde otro servidor ya conectado
Frecuencia de cambio de IPBaja: red fija de casa u oficinaAlta: pasar de wifi a datos cambia la IP pública
Bloqueo de salida al puerto 22Raro en redes propiasHabitual en wifi de invitados, hoteles y aeropuertos
Sesión al cambiar de redSSH se corta; tmux conserva el trabajoCon Mosh sigue abierta; tmux conserva el trabajo
Teclas Ctrl, Esc y flechasTeclado físicoDepende de la app; termi1 las incluye

En termi1, el teclado propio incluye Esc, Ctrl, Tab y flechas, así que cortar un nc colgado con Ctrl+C o recuperar el comando anterior no exige malabares. Mosh mantiene la sesión al pasar de wifi a datos, pero arranca mosh-server a través de una conexión SSH inicial: si el 22 da timeout, Mosh tampoco entra. La IA puede escribir en el prompt un comando como sudo ufw status verbose a partir de una frase dictada, sin pulsar Intro; en conexiones etiquetadas como producción, Production Guard retiene antes del prompt cualquier cambio como ufw allow. Puedes probarlo con la terminal termi1 para iOS.

Preguntas frecuentes

¿Qué significa Connection timed out en SSH?

Connection timed out en SSH significa que el cliente intentó abrir la conexión TCP con el servidor y no recibió ninguna respuesta antes de agotar la espera. Las causas habituales son un firewall que descarta paquetes, un grupo de seguridad sin regla para el puerto 22, una IP equivocada o el servidor apagado.

¿Cómo compruebo si el puerto 22 de un servidor está abierto?

El puerto 22 de un servidor se comprueba con nc -zv -w 5 host 22, que intenta la conexión TCP sin autenticarse. Si responde succeeded u open, el puerto es accesible y el problema está en SSH; si espera hasta el límite, algo en la red o un firewall descarta el tráfico.

¿Por qué SSH conecta con datos móviles y da timeout en la wifi?

SSH conecta con datos móviles y da timeout en la wifi cuando esa red bloquea la salida al puerto 22, algo común en redes de invitados y corporativas. También ocurre al revés si el grupo de seguridad solo permite la IP pública de la wifi y no la de tu operador móvil.

¿Mosh necesita abrir puertos además del 22?

Mosh necesita el puerto TCP 22 para la conexión SSH inicial que arranca mosh-server y, además, los puertos UDP 60000-61000 por defecto. Si el firewall o el grupo de seguridad solo permiten el 22, la conexión SSH funciona pero la sesión de Mosh nunca llega a establecerse.