Estoy viendo retrasos en los inicios de sesión de SSH. Específicamente, hay 2 puntos donde veo un rango de retrasos instantáneos a varios segundos.
- Entre emitir el comando ssh y obtener una solicitud de inicio de sesión y
- entre ingresar la frase de contraseña y tener la carga de shell
Ahora, específicamente estoy viendo detalles ssh solo aquí. Obviamente, la latencia de la red, la velocidad del hardware y los sistemas operativos involucrados, los scripts de inicio de sesión complejos, etc. pueden causar demoras. Para el contexto, utilizo una gran cantidad de distribuciones de Linux y algunos hosts Solaris que utilizan principalmente Ubuntu, CentOS y MacOS X como mis sistemas cliente. Casi todo el tiempo, la configuración del servidor ssh no cambia desde la configuración predeterminada del sistema operativo.
¿En qué configuraciones de servidor ssh debería interesarme? ¿Hay parámetros del sistema operativo / kernel que se pueden ajustar? ¿Trucos de inicio de sesión? Etc?
Respuestas:
Prueba a poner
UseDNS
ano
en/etc/sshd_config
o/etc/ssh/sshd_config
.fuente
ssh -vvv
)./etc/ssh/sshd_config
! ¡Estaba agregando/etc/sshd_config
y no veía ninguna diferencia!Cuando ejecuté
ssh -vvv
en un servidor con un rendimiento lento similar, vi un bloqueo aquí:Al editar
/etc/ssh/ssh_config
y comentar ese método de autenticación, el rendimiento de inicio de sesión volvió a la normalidad. Esto es lo que tengo en mi/etc/ssh/ssh_config
en el servidor:Puede configurarlo globalmente en el servidor, por lo que no acepta GSSAPI para autenticar. Simplemente agregue
GSSAPIAuthentication no
al/etc/ssh/sshd_config
servidor y reinicie el servicio.fuente
GSSAPIAuthentication no
yUseDNS no
en el/etc/ssh/sshd_config
archivo.Para mí, el culpable fue la resolución IPv6, estaba agotando el tiempo de espera. (Supongo que la configuración de DNS incorrecta en mi proveedor de host). Descubrí esto haciendo
ssh -v
, lo que mostró qué paso estaba colgando.La solución es
ssh
con la-4
opción:ssh -4 [email protected]
fuente
debug2: resolving "thing.net.au" port 22
sin error, pero esto no sucede con -4, lo que indica que es un problema de DNS IPv6.Con systemd, el inicio de sesión puede bloquearse en la comunicación dbus con logind después de algunas actualizaciones, luego debe reiniciar logind
Lo vi en Debian 8, Arch Linx y en una lista Suse
fuente
Siempre puede comenzar
ssh
con la-v
opción que muestra lo que se está haciendo en este momento.Con la información que proporcionó, solo puedo sugerir algunas configuraciones del lado del cliente:
Como escribe que está ingresando contraseñas manualmente, le sugiero que use la autenticación de clave pública si es posible. Esto lo elimina como un cuello de botella de velocidad.
También puede deshabilitar el reenvío de X con
-x
y el reenvío de autenticación con-a
(estos pueden estar deshabilitados de forma predeterminada). Deshabilitar especialmente el reenvío X puede proporcionarle una gran mejora de velocidad si su cliente necesita iniciar un servidor X para elssh
comando (por ejemplo, bajo OS X).Todo lo demás realmente depende de qué tipo de retrasos experimente dónde y cuándo.
fuente
Con respecto al punto 2., aquí hay una respuesta que no requiere modificar el servidor ni tener privilegios administrativos / raíz.
Necesita editar su archivo "user ssh_config" que es:
(Nota: tendría que crear el directorio $ HOME / .ssh si no existe)
Y añadir:
Puede hacerlo por host si es necesario :) ejemplo:
Asegúrese de que la dirección IP coincida con la IP de su servidor. Una gran ventaja es que ahora ssh proporcionará autocompletado para este servidor. Por lo tanto, puede escribir
ssh lin
+Tab
y se debe completar automáticamentessh linux-srv
.fuente
Verifique
/etc/resolv.conf
en el servidor para asegurarse de que el servidor DNS, que figura en este archivo, funcione correctamente y elimine cualquier DNS que no funcione.A veces es muy útil.
fuente
Además de los problemas de DNS ya mencionados, si está ingresando a un servidor con muchos montajes NFS, entonces puede haber un retraso entre la contraseña y la solicitud a medida que el
quota
comando verifica su uso / cuota en todos los sistemas de archivos que no están montados con elnoquota
. En los sistemas Solaris, puede ver esto por defecto/etc/profile
y omitirlo ejecutandotouch $HOME/.hushlogin
.fuente
Trabaja bien.
UseDNS no, no funciona con OpenIndiana !!!
Lea "man sshd_config" para todas las opciones
"LookupClientHostnames no" si su servidor no puede resolver
fuente
Si ninguna de las respuestas anteriores funciona y se enfrenta a problemas de búsqueda inversa de DNS, también puede verificar si
nscd
(servicio de nombres cache daemon) está instalado y ejecutándose.Si este es el problema, es porque no tiene caché dns, y cada vez que solicita un nombre de host que no está en su archivo host, envía la pregunta a su servidor de nombres en lugar de buscar en su caché
Probé todas las opciones anteriores y el único cambio que funcionó fue comenzar
nscd
.También debe verificar el orden para hacer una resolución de consulta dns
/etc/nsswitch.conf
para usar primero el archivo hosts.fuente
Probablemente esto solo sea específico para Debian / Ubuntu OpenSSH, que incluye el user-group-modes.patch escrito por uno de los mantenedores de paquetes de Debian. Este parche permite que los archivos ~ / .ssh tengan configurado el bit de escritura del grupo (g + w) si solo hay un usuario con el mismo gid que el del archivo. La función secure_permissions () del parche hace esta comprobación. Una de las fases de la verificación es pasar por cada entrada passwd usando getpwent () y comparar el gid de la entrada con el gid del archivo.
En un sistema con muchas entradas y / o autenticación lenta NIS / LDAP, esta verificación será lenta. nscd no almacena en caché las llamadas getpwent (), por lo que cada entrada passwd se leerá en la red si el servidor no es local. En el sistema encontré esto, agregaba aproximadamente 4 segundos por cada invocación de ssh o inicio de sesión en el sistema.
La solución es eliminar el bit de escritura en todos los archivos en ~ / .ssh haciendo
chmod g-w ~/.ssh/*
.fuente
Descubrí que reiniciar systemd-logind.service solo solucionó el problema durante unas horas. Cambiar UsePAM de yes a no en sshd_config ha resultado en inicios de sesión rápidos, aunque motd ya no se muestra. ¿Comentarios sobre problemas de seguridad?
fuente
Para completar todas las respuestas que muestran que las resoluciones DNS pueden ralentizar su inicio de sesión ssh, a veces, faltan reglas de firewall. Por ejemplo, si DEJAS todos los paquetes de ENTRADA por defecto
entonces tendrá que aceptar INPUT para el puerto ssh y la solicitud DNS
fuente
ssh -vvv
la conexión fue realmente buena hasta que se colgó en el sistema tratando de obtener el terminal durante al menos 20 segundos:¡Después de hacer un
systemctl restart systemd-logind
en el servidor tuve conexión instantánea otra vez!Esto fue en debian8 ! ¡Así que systemd era el problema aquí!
Nota: Bastien Durel ya dio una respuesta para este problema, sin embargo, carece de la información de depuración. Espero que esto sea útil para alguien.
fuente
session [default=1] pam_lastlog.so nowtmp showfailed
en/etc/pam.d/postlogin
. Aparentemente, actualizar el archivo lastlog fue increíblemente lento en mi OpenVZ VPS basado en contenedor.Recientemente he encontrado otra causa de inicios de sesión ssh lentos.
Incluso si usted tiene
UseDNS no
en/etc/sshd_config
, sshd todavía puede realizar búsquedas DNS inversas si/etc/hosts.deny
tiene una entrada como:Eso podría suceder si tiene DenyHosts instalado en su sistema.
Sería genial si alguien supiera cómo hacer que DenyHosts evite ingresar este tipo de entrada
/etc/hosts.deny
.Aquí hay un enlace a las Preguntas frecuentes de DenyHosts sobre cómo eliminar entradas
/etc/hosts.deny
: consulte ¿Cómo puedo eliminar una dirección IP que DenyHosts bloqueó?fuente
Podemos encontrar que el método de resolución de nombre preferido no es el archivo host y luego el DNS.
Por ejemplo, esta sería la configuración habitual:
Primero, se alcanza el archivo de hosts (opción: archivos) y luego DNS (opción: dns), sin embargo, podemos encontrar que se ha agregado otro sistema de resolución de nombres que no está operativo y nos está causando la lentitud al tratar de hacer la resolución inversa.
Si el orden de resolución de nombre no es correcto, puede cambiarlo en:
/etc/nsswitch.conf
Extraído de: http://www.sysadmit.com/2017/07/linux-ssh-login-lento.html
fuente
Intenté todas las respuestas pero ninguna funcionó. finalmente descubro mi problema:
primero ejecuto
sudo tail -f /var/log/auth.log
para poder ver el registro de ssh y luego en otra sesión ejecutéssh 172.16.111.166
y noté que esperabadespués de buscar, ubiqué esta línea en / etc / ssd / ssh_config
Lo comenté y la demora se fue
fuente
Nota: Esto comenzó como un tutorial de "Cómo depurar", pero terminó siendo la solución que me ayudó en un servidor Ubuntu 16.04 LTS.
TLDR : Ejecute
landscape-sysinfo
y compruebe si ese comando tarda mucho en finalizar; es la impresión de información del sistema en un nuevo inicio de sesión SSH. Tenga en cuenta que este comando no está disponible en todos los sistemas, ellandscape-common
paquete lo instala. ("Pero espera hay mas...")Inicie un segundo servidor ssh en otro puerto de la máquina que tenga el problema, hágalo en modo de depuración, lo que no hará que se bifurque e imprima mensajes de depuración:
conectarse a ese servidor desde otra máquina en modo detallado:
Mi cliente muestra las siguientes líneas justo antes de comenzar a dormir:
Buscar en Google eso no es realmente útil, pero los registros del servidor son mejores:
Noté que cuando cambio
UsePAM yes
aUsePAM no
este problema se resuelve.No relacionado con
UseDNS
ninguna otra configuración, soloUsePAM
afecta este problema en mi sistema.No tengo idea de por qué, y tampoco me voy
UsePAM
ano
ir porque no sé cuáles son los efectos secundarios, pero esto me permite seguir investigando.Por lo tanto, no considere que esto sea una respuesta, sino un primer paso para comenzar a descubrir qué está mal.
Entonces continué investigando y corrí
sshd
constrace
(sudo strace /usr/sbin/sshd -ddd -p 44321
). Esto produjo lo siguiente:La línea
/etc/update-motd.d
me hizo sospechar, aparentemente el proceso espera el resultado de las cosas que están en/etc/update-motd.d
Así que
cd
'd en/etc/update-motd.d
y pasó unsudo chmod -x *
fin de inhibir PAM para ejecutar todos los archivos que generan esta dinámicaMessage Of The Day
, que incluye la carga del sistema y si los paquetes deben ser actualizados, y esto resuelve el problema.Este es un servidor basado en una CPU N3150 "energéticamente eficiente" que tiene mucho trabajo que hacer las 24 horas del día, los 7 días de la semana, por lo que creo que recopilar todos estos datos motd fue demasiado.
Puedo comenzar a habilitar scripts en esa carpeta de forma selectiva, para ver cuáles son menos dañinos, pero especialmente las llamadas
landscape-sysinfo
son muy lentas y50-landscape-sysinfo
llaman a ese comando. Creo que es el que causa el mayor retraso.Después de volver a habilitar la mayor parte de los archivos que llegué a la conclusión de que
50-landscape-sysinfo
y99-esm
fueron la causa de mis problemas.50-landscape-sysinfo
tardó unos 5 segundos en ejecutarse y99-esm
unos 3 segundos. Todos los archivos restantes alrededor de 2 segundos en total.Ninguno de los dos
50-landscape-sysinfo
y99-esm
son cruciales.50-landscape-sysinfo
imprime estadísticas interesantes del sistema (¡y también si tiene poco espacio!) e99-esm
imprime mensajes relacionados conUbuntu Extended Security Maintenance
Finalmente, puede crear un script
echo '/usr/bin/landscape-sysinfo' > info.sh && chmod +x info.sh
y obtener esa impresión a pedido.fuente
Este hilo ya está proporcionando un montón de soluciones, pero el mío no se da aquí =). Asi que aqui esta. Mi problema (tardó aproximadamente 1 minuto en iniciar sesión en ssh en mi Raspberry Pi) se debió a un archivo .bash_history dañado. Dado que el archivo se lee al iniciar sesión, esto estaba causando el retraso de inicio de sesión. Una vez que eliminé el archivo, el tiempo de inicio de sesión volvió a la normalidad, como instantáneo.
Espero que esto ayude a otras personas.
fuente
Para mí necesitaba GSSAPI, y no quería desactivar las búsquedas inversas de DNS. Eso no parecía una buena idea, así que revisé la página principal para resolv.conf. Resulta que un firewall entre mí y los servidores a los que estaba enviando SSH estaba interfiriendo con las solicitudes de DNS, porque no estaban en una forma que el firewall esperaba. Al final, todo lo que tenía que hacer era agregar esta línea a resolv.conf en los servidores en los que estaba SSHing:
options single-request-reopen
fuente
Sorprendentemente, una actualización de paquete de enlace en CentOS 7 se rompió con el nombre, ahora indicando en el registro que /etc/named.conf tenía un problema de permisos. Había funcionado bien durante meses con 0640. Ahora quiere 0644. Esto tiene sentido ya que el demonio nombrado pertenece al usuario 'nombrado'.
Con el nombre anulado, todo fue lento, desde los inicios de sesión ssh hasta el servicio de la página desde el servidor web local, las aplicaciones LAMP lentas, etc.
fuente
Para mí hubo un problema en mi
/etc/hosts
archivo local . Así quessh
estaba probando dos IP diferentes (una incorrecta) que tardó una eternidad en expirar.Usando
ssh -v
hizo el truco aquí:fuente
/etc/hosts
del servidor?