longer clientaliveinterval change ssh timeout

clientaliveinterval - ¿Mantener viva la sesión de SSH mientras la computadora está en reposo?



ssh timeout client (5)

¿Es posible mantener viva la sesión SSH mientras la computadora está inactiva? Cuando pongo mi Mac (Lion) en reposo por un corto período de tiempo y luego la reactivo, la sesión sigue viva, pero si la dejo durante la noche, la conexión está cerrada.

He intentado establecer:

ClientAliveInterval 3600 ClientAliveCountMax 10

mismo resultado

¿Por qué la sesión "sobrevive" por un corto período de tiempo? ¿Cómo puedo controlar este tiempo de espera?


A veces, las sesiones se cierran cuando no se transmiten datos. Dejar htop open generalmente evita que se htop mis conexiones ssh, así como también proporciona información útil en tiempo real.

Keepalive debería hacer lo mismo. Tal vez podría intentar reducir el intervalo (la demora entre dos keepalives) a algo como 60, ver si cambia algo.


Encontré la respuesta depende de la configuración de keepalive tcp:

Para la lista de configuraciones TCP disponibles (FreeBSD 4.8 y up y 5.4):

sysctl -A | grep net.inet.tcp

  • net.inet.tcp.keepidle : Cantidad de tiempo, en milisegundos, que la conexión (TCP) debe estar inactiva antes de que se envíen las sondas keepalive (si están habilitadas).

  • net.inet.tcp.keepintvl : el intervalo, en milisegundos, entre las sondas keepalive enviadas a máquinas remotas. Después de que se envíen las sondas TCPTV_KEEPCNT (predeterminado 8), sin respuesta, la conexión (TCP) se interrumpe.

  • net.inet.tcp.always_keepalive - Suponga que SO_KEEPALIVE está configurado en todas las conexiones TCP, el kernel enviará periódicamente un paquete al host remoto para verificar que la conexión aún está activa.

Por lo tanto, la fórmula para calcular el tiempo máximo de conexión inactiva de TCP es la siguiente:

net.inet.tcp.keepidle + (net.inet.tcp.keepintvl x 8)

El resultado está en milisegundos. Por lo tanto, al establecer

net.inet.tcp.keepidle = 10000 net.inet.tcp.keepintvl = 5000 net.inet.tcp.always_keepalive = 1 (must be 1 always)

el sistema desconectará una llamada cuando la conexión TCP esté muerta por: 10000 + (5000 x 8) = 50000 mseg (50 s). Para hacer que el sistema recuerde estas configuraciones al inicio, debe agregarlas al archivo /etc/sysctl.conf


Otra solución es usar autossh , que básicamente controla su sesión ssh y se vuelve a conectar tan pronto como se interrumpe (por ejemplo, después de un ciclo de suspensión, pero también si pierde una conexión WiFi por un tiempo, por ejemplo). Esto funciona especialmente bien para túneles de puertos / ssh reenviados.

Aquí hay un tutorial: http://linuxaria.com/howto/permanent-ssh-tunnels-with-autossh .


Otra solución posible es mosh , que no es exactamente SSH pero mantiene viva la conexión de shell cuando la computadora se apaga, o incluso después de cambiar las direcciones IP.


Si desea una solución elegante para mantener viva una sesión remota, debe verificar la utilidad de la screen . Al usar esta utilidad, puede mantener sus programas remotos en ejecución incluso después de cerrar la sesión o apagar la computadora. Luego puedes volver a conectar tu sesión de screen disponible más tarde.

La pantalla requiere algo de tiempo para aprender lo básico, pero cuando tengas el control, verás lo poderoso que es.

Puede consultar este enlace para ver un tutorial sobre el uso de la pantalla: http://www.thegeekstuff.com/2010/07/screen-command-examples/