June 28, 2011

Manteniendo las sesiones SSH activas

Probablemente para muchos de quienes trabajan la mayor parte del tiempo frente a una terminal UNIX, sea realizando scripts, vigilando uso de recursos o realizando alguna configuración; les resulte  sumamente molesto que de cuando en cuando el firewall elimine nuestras sesiones remotas con los posibles errores que ello conlleva (conectarse nuevamente, recuperar configuraciones, etcétera).
Algunos parámetros que he encontrado útiles para evitar este tipo de inconvenientes los he registrado en la configuración personal de SSH de mi usuario... ustedes usan alguna en particular?

Estos me han resultado particularmente utiles para conservar mis sesiones SSH así como para establecer el uso de determinadas llaves por defecto hacia determinados servidores:

ServerAliveInterval [seconds]
Sets a timeout interval in seconds after which if no data has been received from the server, this option applies to protocol version 2 only.

Establece un tiempo en segundos para que se envíe un paquete dummy de datos, con lo cual la sesión mantendrá actividad en el canal asegurando que la sesión no sea cancelada por el firewall (o incluso por el servidor SSH).


TCPKeepAlive [on | off]
Specifies whether the system should send TCP keepalive messages to the other side.  If they are sent, death of the connection or crash of one of the machines will be properly noticed.  However, this means that connections will die if the route is down temporarily, and some people find it annoying.

Nos notificara en nuestra sesión si el host remoto fue apagado y por consecuencia nuestra sesión cancelada o posiblemente, el servicio SSH fue dado de baja. En ocasiones las sesiones se quedan congeladas (freezed) y no permite manipular nuevamente la terminal, con este parámetro nos indicará y nos permitira obtener el control de la terminal nuevamente.

ForwardAgent [yes | no]
Specifies whether the connection to the authentication agent (if any) will be forwarded to the remote machine.

Si ya sé, ya van de dramáticos; cómo es posible que hagamos un forward del agente que administra las llaves del usuario? Si bien es cierto es posible un hijack attack de nuestra sesión, recomiendo este parámetro si vamos a estar brincando entre servidores; no es lo mismo 10 que 50 o 100 servidores y el estar escribiendo la misma contraseña multiples veces resulta algo incomodo.
Como siempre, se recomienda amplia lectura del manual de usuario, así como los sitios de referencia; y a ti, ¿qué parámetros te han resultado útiles?


Referencias:
Configuración:

# CONF 
# vim: set ts=3 et sw=3 sts=3 si ai syntax=conf: 
# 
# ssh.conf
# =
#
# Andres Aquino 
# 

Host 10.103.*
   Port 22
   Protocol 2
   Cipher blowfish
   Ciphers arcfour,blowfish-cbc,aes128-ctr,aes192-ctr,aes256-ctr,arcfour256
   IdentityFile ~/keyStore/aquino-at-hp.key
   ForwardAgent yes
   TCPKeepAlive yes
   ServerAliveInterval 120
   GSSAPIAuthentication no


Buen camino!