¿Estás intentando acceder por SSH a tu máquina y solo recibes mensajes de error de conexión SSH y no puedes conectar?
Algunos mensajes clásicos de errores SSH son: “Connection timed out“, “unable to connect port 22“, “Port 22: Connection Refused” , “Could not resolve hostname“, “Permission denied” …
Hay una larga lista de errores SSH. Vamos a ver los errores más clásicos y la forma de solucionar problemas con SSH.
Error SSH : Connection Timeout (El tiempo de conexión expiró)
Este error nos muestra mensajes como estos que veremos a continuación.
–> En clientes OpenSSH veremos:
1 | ssh: connect to host 203.0.113.0 port 22: Connection timed out</code> |
–> En PuTTY los errores serán como:
1 | Network error: Connection timed out</code> |
¿Qué podemos hacer para resolver el error Connection Timeout en SSH ?
- Verifica que la IP es la correcta : verifica que puedes hacer ping a esa IP, al nombre del host.
- Verifica que el puerto remoto al que intentas acceder está abierto (puedes hacer un telnet al puerto por ejemplo…).
Error SSH : Connection Refused (Conexión rechazada)
Este error es bastante claro. (Es algo diferente al error de Connection Timeout). En el caso del error Connection Refused, la conexión SSH está siendo enrutada correctamente hacia servidor SSH destino, pero este rechaza la conexión.
–> En clientes OpenSSH veremos:
1 2 | ssh: connect to host [</span><span class="">...] port 22: connection refused <pre lang="javascript" line="1">ssh: connect to host 203.0.113.0 port 22: Connection refused |
–> En PuTTY:
1 | Network error: Connection refused |
¿Qué podemos hacer para resolver el error Connection Refused en SSH ?
-
1
service ssh status o systemctl status sshd
- Podemos comprobar que el puerto de SSH está en ejecución en el servidor SSH, ejecutando netstat:
- Para obtener una lista de las sesiones TCP y de los puertos que están escuchando:
1
sudo netstat -plnt</code>
Para buscar la info de un puerto concreto:
1
netstat -na | find "8080"
- Para obtener una lista de las sesiones TCP y de los puertos que están escuchando:
-
- Si puedes acceder al servidor SSH, comprueba el fichero de configuración de SSH:
1 | /etc/ssh/sshd_config |
O usa grep para encontrar el puerto que utiliza tu servidor SSH:
1 | grep Port /etc/ssh/sshd_conf |
- También podemos comprobar si el cortafuegos del servidor está haciendo de las suyas, y quizás el puerto para SSH se encuentra cerrado.
- Revisamos la configuración de iptables:
1
iptables -L
- Revisamos la configuración de iptables:
Error SSH : Problemas en resolución de Nombres de Host
En estos casos, al intentar conectar a un nombre de host, SSH nos responderá algo como: Nombre o servicio desconocido. Algo así como “no se donde me has mandado conectar” …
Y es por un problema de resolución de nombres.
–> En clientes OpenSSH veremos:
1 | ssh: Could not resolve hostname example.com: Name or service not known |
–> En PuTTY veremos:
1 | Unable to open connection to example.com Host does not exist |
¿Qué podemos hacer para solucionar errores SSH de resolución de nombres de Host?
- Hemos de comprobar que podemos resolver el nombre de host al que intentamos conectar.
- Podemos intentar hacer ping al hostname, y utilizar nslookup para comprobarlo.
- Si no obtenemos respuesta desde el hostname, probaremos a conectar por IP.
Error SSH : Permission denied (publickey)
En los casos del error “Permission denied (publickey)“, el problema está en que el servidor SSH nos está pidiendo una clave publica que no tenemos, o bien tenemos una pero está equivocada, o se ha pasado con errores al servidor SSH …
1 | Permission denied (publickey) |
Error SSH : Remote Host Identification has changed
Este error apunta a un cambio en el nombre del host
–> Si usamos PuTTY, veremos:
1 | PuTTY error output |
De nuevo usaremos los diagnósticos previos para confirmar que el hostname existe y podemos llegar hasta él.
Otras causas de problemas SSH
- El servicio SSH no está corriendo sobre el puerto 22 (Improbable, seguramente tú ya sabes en qué puerto lo has configurado, pero revísalo).
- Alguna directiva SSH te bloquea el acceso. Revisa las directivas SSH y los permisos de los ficheros necesarios para SSH.
- Tienes claves SSH viejas o tu Servidor SSH está corrupto. Quizás sea necesario reinstalar SSH y regenerar las claves SSH:
- Si la razón es esta, probablemente recibas errores como este:
1 2 3 4 | Feb 18 13:15:31 raspberrypi sshd[2392]: error: key_load_public: invalid format Feb 18 13:15:31 raspberrypi sshd[2392]: error: Could not load host key: /etc/ssh/ssh_host_ed25519_key Feb 18 13:42:53 raspberrypi sshd[2770]: error: key_load_public: invalid format Feb 18 13:42:53 raspberrypi sshd[2770]: error: Could not load host key: /etc/ssh/ssh_host_rsa_key |
–> En este caso, puedes regenerar las claves SSH (eliminando previamente las viejas):
1 | sudo rm /etc/ssh/ssh_host* |
1 | sudo dpkg-reconfigure openssh-server |
Consejos generales para diagnóstico de errores SSH
- Conéctate al monitor del equipo y comprueba el status del servicio SSH:
- service ssh status
- Revisa las Directivas SSH que se encuentran activas
- Comprueba los permisos de los usuarios y grupos SSH
- también revisa el log a ver qué encuentras:
- journalctl -xe
- Usa el modo SSH debug : ssh -v