Evitar que SSH se desconecte tras un tiempo de inactividad

Vamos a ver cómo evitar que SSH se desconecte tras un tiempo de inactividad.

 

 
En muchas ocasiones nos encontramos que al conectar por SSH a un servidor, la sesión ssh se desconecta tras un tiempo de inactividad. Es algo normal en servidores, ya que si permitiéramos tener conexiones inactivas (idle) y no las controlamos, podemos acabar saturando el servidor. Pero a nosotros en este caso nos interesa evitar que SSH se desconecte tras un tiempo de inactividad .. así que algo tendremos que hacer.
 

 

¿Por qué se desconectan las sesiones SSH tras un tiempo de inactividad?

 
Esto se debe a la configuración de SSH del servidor, que utiliza la directiva “ClientAliveInterval” para determinar cuanto tiempo  puede permanecer inactivo el cliente SSH antes de ser desconectado.

Por ejemplo , para aplicar la desconexión de un cliente SSH cuando permanezca inactivo más de 5 minutos (300 segundos) aplicaremos:

# KeepAlive specifies whether keep alive messages are sent to the client.
# Note that the client may also be sending keep alive messages to the server.
KeepAlive yes
ClientAliveInterval 300

 

Lo que hace la directiva “ClientAliveInterval” es configurar en el servidor SSH el tiempo que debe pasar para que envíe un mensaje KeepAlive al cliente. Si te fijas, en la linea anterior a “ClientAliveInterval” , podemos ver  “KeepAlive yes“.

La directiva KeepAlive configura el servidor para enviar esos mensajes keepalive cada 5 minutos en el ejemplo anterior.

 

Y esta directiva “ClientAliveInterval” se combina con la directiva “ClientAliveCountMax“, que le indica al servidor la cantidad de mensajes que deben ser enviados antes de cerrar la sesión.

ClientAliveCountMax 0

 

 
Así que si configuramos el fichero de configuración del servicio SSH así:

KeepAlive yes
ClientAliveInterval 300
ClientAliveCountMax 0

 

con estas directivas, le estamos diciendo al servidor que :

  • KeepAlive –> Manda mensajes para comprobar si el cliente sigue activo : sí
  • ClientAliveInterval –> Cada cuanto tienes que mandar esos mensajes : 5 minutos (300 segundos)
  • ClientAliveCountMax –> Cuantos mensajes tienes que mandar al cliente antes de cerrar la sesión.

 

En el ejemplo que vemos, el servidor está configurado para mandar mensajes keepalive, cada 5 minutos, pero está configurado para mandar 0 mensajes antes de cerrar la sesión; así que si pasan 5 minutos y el cliente SSH está inactivo, se cerrará la sesión.

 

 

¿ Cómo evitar que ssh se desconecte ?

 

Una solución evidente es modificar las directivas anteriores en el servidor, pero normalmente no es adecuado hacerlo porque si las directivas existen es por seguridad.

 

Así que vamos a hacer un bucle con el comando sleep para evitar que se cierre la terminal por inactividad. El bucle con sleep pedirá la fecha cada 30 segundos, y así hasta el infinito.

es probable que incluso con este sleep algunos servidores SSH nos tiren la conexión si permanece inactiva durante mucho tiempo, pero en otros casos funcionará a la perfección :

while true; do
date
sleep 30
done