Es muy común encontrarnos con el problema de que al acceder vía ssh la respuesta de «login» del servidor es muy lenta, en algunos casos se puede demorar incluso más de un minuto.
Normalmente este fallo se suele deber a dos causas, aunque lo mejor para diagnosticarlo siempre es hacer ese mismo login ssh pero añadiendo verbose, que no es otra cosa que activar el debug del proceso de conexión SSH:
$ ssh foo@bar -vv
¿Cuales son entonces las causas más comunes para esta lentitud?
- Problemas de resolución DNS (resolución inversa)
- Problemas con métodos de autenticación
Por defecto SSH hace reverse dns de la IP con la que estamos conectando, aunque en caso de fallo este punto no suele demorar más de 10 ó 15 segundos la conexión, sí que conviene saber que o arreglamos la reverse DNS de nuestro hostname o deshabilitamos este chequeo en el servidor DNS
/etc/ssh/sshd_config
UseDNS no
Y el segundo punto es la autenticación. Si hacéis el debug a la conexión SSH veréis que se intentan varios métodos de autenticación hasta llegar a la auth por password. Uno de ellos suele dar muchos problemas en caso de no estar disponible, se trata de GSSAPI y Kerberos.
Os muestro un debug con problemas de autenticación GSSAPI por no estar disponible:
debug1: Authentications that can continue: publickey,gssapi-keyex,gssapi-with-mic,password debug1: Next authentication method: gssapi-keyex debug1: No valid Key exchange context debug2: we did not send a packet, disable method debug1: Next authentication method: gssapi-with-mic [segundos de espera...] debug1: Unspecified GSS failure. Minor code may provide more information Cannot determine realm for numeric host address [segundos de espera...] debug1: Unspecified GSS failure. Minor code may provide more information Cannot determine realm for numeric host address [segundos de espera...] debug1: Unspecified GSS failure. Minor code may provide more information [segundos de espera...] debug1: Unspecified GSS failure. Minor code may provide more information Cannot determine realm for numeric host address debug2: we did not send a packet, disable method debug1: Next authentication method: publickey debug1: Trying private key: /home/admin/.ssh/id_rsa debug1: Trying private key: /home/admin/.ssh/id_dsa debug2: we did not send a packet, disable method debug1: Next authentication method: password
Varias veces ha intentado conectar por GSS pero no ha podido, con el consiguiente tiempo de espera (muy alto). Al final desiste e intenta autenticar por private key y finalmente password.
Para solucionarlo, desactivamos GSSAPIAuthentication y reiniciamos el demonio SSHD, veréis como el acceso ya es instantáneo:
/etc/ssh/sshd_config
GSSAPIAuthentication no