Cuando realizamos una conexión SSH (Secure SHell), en ocasiones podemos encontrarnos con que el proceso de login es lento.
Concretamente, experimentamos lentitud hasta que se nos pide el password.
Ejemplo de problema de login SSH lento (conectamos con el usuario root al servidor ssh: 192.168.1.25):
ssh root@192.168.1.25
Espera...
Espera...
Espera...
Espera...
Espera...
Espera...
Espera...
Password:
Las causas de que el proceso de login SSH sea lento acostumbran a ser dos:
1) Reverse DNS
2) Autenticación gssapi
Vamos a analizar cada una de ellas:
1) Linux: SSH login lento: Reverse DNS
De forma predeterminada, cuando un cliente SSH realiza una conexión a un servidor SSH, el servidor SSH trata de resolver el nombre asociado a la IP con una consulta al DNS Server.
En ocasiones, nos podemos encontrar con que el servidor SSH no dispone de salida a Internet o bien no dispone de DNS Server configurado, así que la resolución inversa de la dirección IP no se efectúa, pero se intenta, provocando lentitud en el proceso de login.
¿Cómo podemos desactivar esta funcionalidad?
Deberemos editar el fichero de configuración del servidor SSH:
/etc/ssh/sshd_config
y allí establecer la siguiente linea:
UseDNS no
2) Linux: SSH login lento: Autenticación gssapi
La segunda causa habitual que puede provocar un login SSH lento es la autenticación gssapi.
La autenticación GSSAPI (Generic Security Services Application Program Interface) se basa en intercambios de clave como Kerberos o GSI.
Si vamos a utilizar la autenticación basada en usuario y password, no se utilizará GSSAPI.
Sin embargo, si analizamos un log de conexión SSH, nos podemos encontrar con que se intenta el método de autenticación GSSAPI, provocando lentitud.
Para ver este problema, podemos ejecutar desde un equipo donde dispongamos de un cliente SSH y conectividad con el servidor SSH:
ssh -vvv 192.168.1.25
Donde 192.168.1.25 es la dirección IP del servidor SSH.
Pasando el parámetro -vvv al comando ssh, nos mostrará información muy detallada acerca de la conexión SSH.
Si analizamos la información mostrada, probablemente veremos un fragmento parecido a este:
debug3: authmethod_is_enabled gssapi-with-mic
debug1: Next authentication method: gssapi-with-mic
debug1: Unspecified GSS failure. Minor code may provide more information
No Kerberos credentials available
debug1: Unspecified GSS failure. Minor code may provide more information
No Kerberos credentials available
debug1: Unspecified GSS failure. Minor code may provide more information
debug1: Unspecified GSS failure. Minor code may provide more information
No Kerberos credentials available
debug2: we did not send a packet, disable method
debug3: authmethod_lookup publickey
debug3: remaining preferred: keyboard-interactive,password
debug3: authmethod_is_enabled publickey
debug1: Next authentication method: gssapi-with-mic
debug1: Unspecified GSS failure. Minor code may provide more information
No Kerberos credentials available
debug1: Unspecified GSS failure. Minor code may provide more information
No Kerberos credentials available
debug1: Unspecified GSS failure. Minor code may provide more information
debug1: Unspecified GSS failure. Minor code may provide more information
No Kerberos credentials available
debug2: we did not send a packet, disable method
debug3: authmethod_lookup publickey
debug3: remaining preferred: keyboard-interactive,password
debug3: authmethod_is_enabled publickey
Editamos el fichero de configuración del servidor SSH:
/etc/ssh/sshd_config
y allí establecemos la siguiente linea:
GSSAPIAuthentication no
Linux: SSH login lento: Consideraciones adicionales:
1- El fichero de configuración del servidor SSH, puede variar según la distribución utilizada.
Algunas de las rutas frecuentes:
/etc/sshd_config
/etc/ssh/sshd_config
2- Nos podemos encontrar que el método de resolución de nombre preferido no sea fichero de hosts y a continuación DNS.
Por ejemplo, esta sería la configuración habitual:
[root@LINUX1 ~]# cat /etc/nsswitch.conf|grep hosts
#hosts: db files nisplus nis dns
hosts: files dns myhostname
Primero se consulta el fichero de hosts (opción: files) y luego DNS (opción: dns), sin embargo podemos encontrarnos con que se haya incorporado otro sistema de resolución de nombres que no esté operativo y nos este causando la lentitud al tratar de resolver el registro inverso.
3- Al realizar un cambio en el fichero de configuración del servidor SSH, deberemos reiniciar el servicio para que tenga efecto.
A continuación, algunos ejemplos para reiniciar el servicio SSH, usar el adecuado para cada distribución:
/etc/init.d/ssh restart
systemctl restart sshd
service sshd restart
Muy bueno. Más de una vez me he estresado un montón con este tipo de esperas tontas a la hora de conectar. :)
ResponderEliminar¡Muchas gracias!
EliminarUn saludo,
Xavi.
Excelente artículo, muy ilustrativo.
ResponderEliminar¡Muchas gracias!
EliminarUn saludo,
Xavi.
Como siempre aportado mucho valor Xavi. Muchas gracias.
ResponderEliminarUn saludo.
Hola Javi,
EliminarMuchas gracias a ti por tu comentario.
¡Un abrazo!
Xavi.
Excelente aporte a Linux
ResponderEliminar¡Muchas gracias!
EliminarUn saludo,
Xavi.
Tengo una MV con CentOS 7 y el ssh tardaba más de lo normal, me acordé de este artículo, como usaré usuario y contraseña para entrar, cambiando las dos cosas que comentabas, resultado estupendo, tarda lo mismo que la otra MV de debian, que es casi "instantáneo.
ResponderEliminarUn saludo y gracias.
Muchas gracias Javi por tu comentario.
EliminarMe alegro mucho que te haya ayudado el post.
¡Un saludo!
Xavi.