En mi trabajo estoy continuamente utilizando el cliente SSH de mi Mac y de mi Ubuntu para conectarme a los servidores. Muchas veces tengo que dejar la sesión abierta para volver a mirar después, o simplemente para dejar ejecutando un comando que tarda x tiempo en finalizar. Pues resulta que cuando me conecto desde mi conexión de Ono, si dejo la conexión inactiva más de 4 o 5 minutos, se corta y tengo que volver a conectarme. Esto es un incordio (por no utilizar otra palabra), sobre todo si dejas un comando largo que tiene que estar un buen tiempo ejecutándose. Sin embargo, esto no me pasa cuando empleo el router de mi conexión de Jazztel.
Para solucionar el problema de la ejecución de comandos largos desde SSH se puede emplear el comando screen, muy útil para esto, pero sigue siendo un tostón tener que conectarse de nuevo por SSH, hacer un detach del screen y volver a visualizar el screen, para que luego se te vuelva a cortar a los 5 minutos de inactividad.
Leyendo un poco, descubro que esto es un mecanismo del propio router NAT, que corta las conexiones establecidas si están más de X tiempo en espera para dejar la tabla NAT lo más limpia posible. Algunos routers son benévolos y te dan un día entero de tiempo de conexión (Jazztel), otros, como el router de Ono, te corta la conexión cada 5 minutos.
Pues todo este rollo, es para contaros que existe un parámetro que puedes añadir en el fichero ssh_config y que permite enviar paquetes KeepAlive cada X segundos para mantener la conexión abierta:
Host * ServerAliveInterval 20
Esto haría que en todos los hosts a los que nos conectamos se envíen paquetes KeepAlive cada 20 segundos para mantener la sesión abierta. El fichero al que añadir estas dos líneas es /etc/ssh_config en Mac y /etc/ssh/ssh_config en Linux. Con esto se ha solucionado mi problema con el SSH y Ono que me hacía perder tanto tiempo inutilmente. Por lo que he visto por ahí también se puede configurar el parámetro en el router, pero me parecía más comodo configurar mi cliente SSH.