en Tutoriales

¿Cómo evitar que la sesión de ssh se quede congelada trás un tiempo sin actividad?

En muchas ocasiones cuando tenemos abierta una sesión de ssh con un servidor remoto y durante unos minutos no interactuamos con el mismo, es frecuente que la sesión se quede congelada y no podamos enviar ni recibir comandos. Cuando esto ocurre es útil conocer los comandos de control de SSH con los cuales, podemos terminar la sesión por la fuerza y reiniciarla. Para ello tenemos que pulsar ENTER para asegurarnos de que el cursor está al inicio de una nueva linea y posteriormente pulsar ~ seguido de . (punto) Esto cerrará la sesión de ssh por la fuerza y podremos continuar usando la terminal en local e incluso reiniciar la sesión remota.

Pero para saber cómo evitar que nos ocurra esto en primer lugar tenemos que conocer por que pasa. Muchos firewalls y tablas de enrutado NAT de routers mantienen una tabla de correspondencia con las diferentes conexiones que hay abiertas desde los ordenadores de la red con el objetivo de enrutar los paquetes de forma segura y hacia los equipos a los que corresponde. Sin embargo, cuando no interactuamos con una terminal de SSH abierta, esta no envía absolutamente ninguna comunicación por red. Esto hace que pasado un tiempo, los equipos de red intermedios, consideren que la conexión ya no se está usando y liberen los recursos asociados a la misma. Al ocurrir esto, los nuevos paquetes que se envíen, no van a llegar a su destino y la sesión estará congelada.

Para evitar este problema tenemos dos opciones, configurar el servicio de ssh del servidor para que envíe un paquete «keep alive» cada cierto tiempo de forma automática o bien configurar nuestro cliente de SSH para que haga lo mismo. En muchos de los casos, con esta segunda opción es suficiente y, puesto que normalmente vamos a conectarnos desde nuestro ordenador hacia más de un servidor, es mas cómodo configurar el keep alive únicamente en el cliente. Para ello, es suficiente con editar el archivo /etc/ssh/ssh_config y añadir las siguientes líneas de configuración.

Host *
ServerAliveInterval 100

Ten en cuenta que la linea Host * puede ya existir o estar comentada, en ese caso es suficiente con descomentar y añadir la segunda linea debajo. El 100 indica que se va a enviar un keep alive cada 100 segundos.

En la mayoría de los casos esto va a ser suficiente para que nuestra sesión no caduque nunca.

Escribe un comentario

Comentario