¿Cuál es el tiempo de espera inactivo predeterminado para OpenSSH?

25

Parece que no puedo encontrar una respuesta a esta simple pregunta, que necesito para alguna documentación de cumplimiento.

En una instalación predeterminada de CentOS 6.5 (OpenSSH 5.3p1-94.el6), ¿después de cuánto tiempo de inactividad finalizará la sesión SSH de un usuario? Creo que lo siguiente se puede configurar para aumentar el tiempo de espera inactivo, pero están comentados de forma predeterminada.

$ grep -i alive /etc/ssh/sshd_config
#TCPKeepAlive yes
#ClientAliveInterval 0
#ClientAliveCountMax 3

Además, ¿hay un comando para volcar una lista de la sshdconfiguración actual ? No veo nada adentro man sshd.

Banjer
fuente
3
Algunos shells pueden configurarse para salir después de un tiempo de espera. Eso provocaría que la sesión ssh finalice. Compruebe si su variable de entorno TMOUT está configurada.
Kenster

Respuestas:

23

Las líneas comentadas en sshd_configgeneralmente muestran los valores predeterminados. Este es el caso con todas las líneas en su pregunta. Puede verificar esto en la página de sshd_configmanual . Aquí están los fragmentos relevantes:

TCPKeepAlive

      Especifica si el sistema debe enviar mensajes de actividad TCP al otro lado. Si se envían, se notará correctamente la muerte de la conexión o el bloqueo de una de las máquinas. Sin embargo, esto significa que las conexiones morirán si la ruta se corta temporalmente, y algunas personas lo encuentran molesto. Por otro lado, si no se envían mensajes de alerta TCP, las sesiones pueden colgar indefinidamente en el servidor, dejando usuarios "fantasmas" y consumiendo recursos del servidor.

      El valor predeterminado es "sí" (para enviar mensajes de actividad TCP), y el servidor notará si la red se cae o el host del cliente falla. Esto evita sesiones infinitamente colgantes.

      Para deshabilitar los mensajes TCP keepalive, el valor debe establecerse en "no".

      Esta opción se llamaba anteriormente KeepAlive.

ClientAliveCountMax

      Establece el número de mensajes vivos del cliente (ver más abajo) que pueden enviarse sin que sshd (8) reciba ningún mensaje del cliente. Si se alcanza este umbral mientras se envían mensajes vivos del cliente, sshd desconectará al cliente y finalizará la sesión. Es importante tener en cuenta que el uso de mensajes vivos del cliente es muy diferente deTCPKeepAlive (abajo)(encima). Los mensajes vivos del cliente se envían a través del canal encriptado y, por lo tanto, no se podrán suplantar. La opción de keepalive TCP habilitada por TCPKeepAlivees spoofable. El mecanismo de cliente activo es valioso cuando el cliente o el servidor dependen de saber cuándo una conexión se ha vuelto inactiva.

      El valor predeterminado es 3. Si ClientAliveInterval(consulte a continuación) se establece en 15 y ClientAliveCountMaxse deja en el valor predeterminado, los clientes SSH que no respondan se desconectarán después de aproximadamente 45 segundos. Esta opción solo se aplica a la versión 2 del protocolo.

ClientAliveInterval

      Establece un intervalo de tiempo de espera en segundos después del cual, si no se han recibido datos del cliente, sshd (8) enviará un mensaje a través del canal encriptado para solicitar una respuesta del cliente. El valor predeterminado es 0, lo que indica que estos mensajes no se enviarán al cliente. Esta opción solo se aplica a la versión 2 del protocolo.

jordanm
fuente
1
Corríjame si está equivocado, pero si no hubiera un firewall entre mí y la máquina (con las configuraciones predeterminadas), ¿nunca me desconectarían? Sé que nuestro firewall corta las conexiones TCP inactivas después de 60 minutos, así que ahí es donde están ocurriendo las conexiones inactivas de cierre. Solo quería verificar y ver si OpenSSH cierra explícitamente las sesiones. Creo que la respuesta es No, openssh no cierra explícitamente las conexiones inactivas, pero los firewalls sí lo hacen. La configuración mencionada en su respuesta realmente ayuda a persistir la conexión o a finalizar correctamente la sesión si ve que se ha interrumpido.
Banjer
2
El texto citado dice que el valor predeterminado para ClientAliveInterval es 0, lo que significa que no define un intervalo de tiempo para el que una conexión permanece abierta. Y, sin embargo, sabemos que el intervalo de tiempo tiene algún valor finito por defecto. Por lo tanto, parece que debe haber algún otro parámetro que establezca cuánto tiempo la conexión permanece abierta de forma predeterminada. Si mi análisis anterior es correcto, entonces suponga que tanto el servidor como el cliente son máquinas Linux que ejecutan openssh, y ambos están utilizando todos los valores predeterminados. En este caso, ¿qué lado establece el valor predeterminado, cuál es su valor y dónde se establece?
Ben Crowell
2
@BenCrowell Y, sin embargo, sabemos que el intervalo de tiempo tiene algún valor finito por defecto. ¿Qué intervalo de tiempo y cómo sabes esto?
Piotr Dobrogost
9

Puede configurar SSH keepalive para el lado del cliente o del servidor:

Lado del cliente

Archivo: /etc/ssh/ssh_config

Contenido:

Host *
ServerAliveInterval XX
ServerAliveCountMax YY

Lado del servidor

Archivo: /etc/ssh/sshd_config

Contenido:

ClientAliveInterval XX
ClientAliveCountMax YY

Extraído de: http://www.sysadmit.com/2016/02/linux-y-vmware-ssh-evitar-desconexion.html

Yamanoteona
fuente
66
Útil, pero no responde la pregunta de ninguna manera.
bzeaman
6

OpenSSH no terminará una sesión de shell que haya estado inactiva durante algún tiempo. Esto no es algo que hace OpenSSH. La finalización de una sesión de shell inactiva no está relacionada con la configuración de OpenSSH.

La configuración que está mostrando está relacionada con los tiempos de espera cuando la conexión se cae y no está relacionada con el shell en el host remoto y lo que el usuario está haciendo o no haciendo allí.

El shell del host remoto puede finalizar (o puede ser eliminado por algún otro proceso) después de un tiempo de inactividad, pero esto no está relacionado con la configuración del servicio SSH en el servidor y de su cliente SSH.

Relacionado:


Para volcar la sshdconfiguración, use el "modo de prueba extendida" como root:

sshd -T

Esto está documentado en el sshd(8)manual (mirando OpenSSH_7.7, LibreSSL 2.7.2OpenBSD aquí):

-T

Modo de prueba extendido. Verifique la validez del archivo de configuración, envíe la configuración efectiva a stdout y luego salga . Opcionalmente, las reglas de coincidencia pueden aplicarse especificando los parámetros de conexión utilizando una o más -Copciones.

Esta opción se agregó a sshdOpenSSH 5.1 / 5.1p1 en 2008.

Kusalananda
fuente
3

Si el requisito es cerrar la conexión SSH después de un período de inactividad, los shells proporcionan variables de tiempo de espera.

Para bash:

TMOUT: si se establece en un valor mayor que cero, TMOUT se trata como el tiempo de espera predeterminado para la lectura integrada. El comando select finaliza si la entrada no llega después de TMOUT segundos cuando la entrada proviene de un terminal. En un shell interactivo, el valor se interpreta como el número de segundos que se espera la entrada después de emitir la solicitud primaria. Bash termina después de esperar ese número de segundos si la entrada no llega.

pruebe esto ejecutando TMOUT=10y espere 10 segundos para cerrar la conexión.

Para tcsh:

La variable de shell de inicio de sesión automático se puede configurar para cerrar sesión o bloquear el shell después de un número determinado de minutos de inactividad.

En tcsh, la sintaxis para establecer el tiempo de espera de diez minutos es set autologout=10. Esto no funciona en el csh original.

Sandeep kumar singh
fuente
-2

Si desea que el tiempo de espera sea de 10 segundos para todos, haga lo siguiente para la configuración del servidor (sshd_config):

ClientAliveInterval 10
ClientAliveCountMax 0

Si desea que el tiempo de espera sea de 10 segundos para los clientes locales, haga lo siguiente para la configuración del cliente (ssh_config):

ServerAliveInterval 10
ServerAliveCountMax 0

Si el parámetro AliveCountMax no es cero, probablemente no funcionará porque el servidor responderá restableciendo el temporizador (a menos que haya un problema de conexión). Puede ver esto ejecutando el cliente ssh con la depuración activada.

JohnA
fuente