ServerAliveInterval : número de segundos que el cliente esperará antes de enviar un paquete nulo al servidor (para mantener viva la conexión).
ClientAliveInterval : número de segundos que el servidor esperará antes de enviar un paquete nulo al cliente (para mantener viva la conexión).
Establecer un valor de 0 (el valor predeterminado) deshabilitará estas funciones, por lo que su conexión podría caerse si está inactiva durante demasiado tiempo.
ServerAliveInterval parece ser la estrategia más común para mantener viva una conexión. Para evitar el problema de la tubería rota, aquí está la configuración ssh que uso en mi archivo .ssh / config:
Host myhostshortcut
HostName myhost.com
User barthelemy
ServerAliveInterval 60
ServerAliveCountMax 10
La configuración anterior funcionará de la siguiente manera,
- El cliente esperará inactivo durante 60 segundos (tiempo ServerAliveInterval) y enviará un "paquete nulo no operativo" al servidor y esperará una respuesta. Si no recibe respuesta, seguirá intentando el proceso anterior hasta 10 (ServerAliveCountMax) veces (600 segundos). Si el servidor aún no responde, el cliente desconecta la conexión ssh.
ClientAliveCountMax en el lado del servidor también podría ayudar. Este es el límite de cuánto tiempo se permite que un cliente no responda antes de desconectarse. El valor predeterminado es 3, como en tres ClientAliveInterval.
Esto se explica en el
sshd_config
manual (man sshd_config
):Para las opciones del cliente, vea la explicación en
man ssh_config
:Según lo anterior, 0 significa que está deshabilitado. Por lo tanto, debe establecer estos valores lo suficientemente altos como para evitar un error de tubería rota .
fuente
ServerAliveInterval
en mi archivo de configuración.La respuesta de Barthelemy es genial, pero en realidad no llega a la raíz del problema. Suspende su máquina y desea que la sesión SSH siga viva cuando enciende su computadora.
No existe tal configuración para ssh que mantenga viva la conexión de esa manera. SSH usa TCP, para empezar necesitas el apretón de manos de tres vías y luego mantenerte vivo después de un tiempo de inactividad. Cuando apaga / hiberna, todas sus conexiones TCP se cierran con FIN. No hay forma de superar eso.
Para una solución sucia, puede usar VPS u otro cuadro en línea con pantalla para mantener la conexión. Mi consejo no lo haga por razones de seguridad.
fuente
Como no puede garantizar que una conexión SSH (que sea TCP) permanezca activa una vez que un extremo deja de enviar ACK a los paquetes recibidos, personalmente uso http://www.harding.motd.ca/autossh/ para reiniciar todas mis conexiones SSH casi tan pronto como me deshago.
Dado que GNU Screen estará en uso en el lado del servidor, volver a conectarlo me lleva a donde estaba antes.
Puede hacer que escuche en puertos adicionales para que verifique continuamente que las conexiones aún estén activas, pero personalmente creo que funciona lo suficientemente bien con eso deshabilitado y solo confiando en el propio SSH
ServerAliveInterval
/ServerAliveCountMax
.Otra opción es http://mosh.mit.edu/ que usa UDP y se recupera sin problemas de la falta de conectividad a largo plazo.
fuente
También puede ejecutar comandos con
nohup
si desea que se ejecuten independientemente de su conexión SSH.p.ej
$ nohup tar -xzf some_huge.tar.gz &
El
&
es, creo, no es necesario, pero es conveniente ya que hace que el proceso de ejecución en segundo plano para que pueda hacer otras cosas.Siempre uso nohup para cualquier proceso que tome un tiempo, por lo que no tengo que comenzar de nuevo si pierdo la conexión por cualquier razón: corte de energía (en mi ubicación remota, no en el host obviamente), corte de red, lo que sea.
fuente
zsh
usuarios deberían quedarse endisown -h
lugar denohup
, a menos que el problema se haya solucionado desde entonces.Ponga su sesión de larga duración dentro de la pantalla Vea la pantalla -h para más detalles
De esa manera, puede volver a conectarse a la máquina usando ssh y volver a conectar a la sesión de pantalla
fuente