#SysAdmin – Mantener activas las sesiones #SSH

ssh-loginMientras trabajamos en nuestros servidores de internet vía OpenSSH, en ocasiones ocurre que durante un periodo de inactividad (generalmente pocos minutos) esta conexión se interrumpe, se corta la comunicación con el servidor y recibimos el  error Write Failed: broken pipe. Curiosamente, esto no suele ocurrir cuando trabajamos con otras máquinas de nuestra red local, lo cual nos hace sospechar que el ISP que interconecta nuestra red local con internet cierra las conexiones inactivas cada ciertos minutos.

Para solucionar este problema, necesitamos que el servidor o el cliente envíen un mensaje solicitando respuesta al dispositivo remoto cada cierto tiempo. De esta forma, aunque la conexión entre en inactividad durante largos periodos de tiempo, en ningún momento será interrumpida por el ISP, pues cada cierto tiempo discurren datos por la misma.

Podemos hacer que el servidor envíe ese mensaje al cliente, o viceversa. Yo prefiero la segunda opción, así me aseguro que este equipo no se desconectará de ningún servidor SSH al que se conecte. Para hacer que el cliente envíe mensajes al servidor, definiremos en el cliente la opción ServerAliveInterval, compañada del número de segundos tras los cuales enviará un nuevo mensaje al servidor, nosotros lo pondremos en 60, que envíe un mensaje cada minuto. Podemos definir esta opción de tres formas diferentes:

1. Definirlo como parámetro del sistema

Esta es mi forma preferida. De esta forma añadimos el parámetro en el fichero de configuración del cliente SSH. Esto hará que toda conexión SSH que se inicie desde equipo mantenga activa la conexión actuando cada minuto, independientemente de quién sea el usuario que lo lanza.

1
# echo -e '\n# Sending message to server every minute for keeping session alive\nServerAliveInterval 60' >> /etc/ssh/ssh_config

2. Definirlo como parámetro del usuario

De esta manera, el usuario puede habilitar esta opción en las preferencias de SSH que se guardan en su directorio home. Sólo las conexiones iniciadas por este usuario se verán afectadas por la modificación, por lo que las conexiones de los demás usuarios seguirán viéndose interrumpidas. Cada usuario debería realizar la misma operación para que sus conexiones se mantengan activas en periodos de inactividad:

1
# echo -e '\n# Sending message to server every minute for keeping session alive\nServerAliveInterval 60' >> ~/.ssh/config

3. Definirlo como parámetro del comando

Este último modo no requiere modificar ficheros de configuración en el cliente, aunque puede resultar tedioso tener que añadir la opción al iniciar cada conexión SSH. El cliente OpenSSH acepta ciertos parámetros durante su invocación, donde también podremos definir este intervalo:

1
$ ssh -o ServerAliveInterval=60 user@domain.com

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

*