Buscar

Linux: SSH login lento

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... 
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

Para desactivar esta funcionalidad y así mejorar el tiempo de conexión SSH:

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

6 comentarios:

  1. 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
  2. Excelente artículo, muy ilustrativo.

    ResponderEliminar
  3. Como siempre aportado mucho valor Xavi. Muchas gracias.

    Un saludo.

    ResponderEliminar
    Respuestas
    1. Hola Javi,

      Muchas gracias a ti por tu comentario.

      ¡Un abrazo!

      Xavi.

      Eliminar