Solucionar problemas con SSH

¿Estás intentando acceder por SSH a tu máquina y solo recibes mensajes de error de conexión SSH y no puedes conectar?

 

problemas con SSH

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 ?

  • Hemos de comprobar que se permiten las conexiones al puerto 22 en la red (en tu red casera seguramente no tendrás este problema, pero en algunas redes privadas puede ocurrir).
  • Verficaremos que el servicio SSH del servidor está en ejecución, y corriendo en el puerto adecuado:
    • 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"

     

      • 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

     

     

    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

     

     

     

     

    • también revisa el log a ver qué encuentras:
      • journalctl -xe
      • Usa el modo SSH debug : ssh -v