Si hallas algún error en tu código o trabajo, recuerda probar siempre en un entorno de testing antes añadir el código al trabajo final.
Solución:
ServerAliveInterval: número de segundos que el cliente esperará antes de enviar un null paquete al servidor (para mantener viva la conexión).
ClientAliveInterval: número de segundos que el servidor esperará antes de enviar un null paquete 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 de ServerAliveInterval) y enviará un “no-op null paquete” al servidor y espera una respuesta. Si no hay respuesta, seguirá intentando el proceso anterior hasta 10 (ServerAliveCountMax) veces (600 segundos). Si el servidor aún no responde, entonces el cliente desconecta la conexión ssh .
ClientAliveCountMax en el lado del servidor también podría ayudar. Este es el límite de tiempo que un cliente puede permanecer sin responder antes de ser desconectado. El valor predeterminado es 3, como en tres ClientAliveInterval.
Esto se explica en sshd_config
manual (man sshd_config
):
ClientAliveInterval
Establece un intervalo de tiempo de espera en segundos después del cual, si no se han recibido datos del cliente, sshd enviará un mensaje a través del canal encriptado para solicitar una respuesta del cliente. El valor predeterminado es 0, lo que indica que estos mensajes no se enviarán al cliente. Esta opción se aplica solo a la versión 2 del protocolo.
ClientAliveCountMax
El valor predeterminado es 3. Si
ClientAliveInterval
(ver más abajo) se establece en 15, yClientAliveCountMax
se deja en el valor predeterminado, los clientes SSH que no respondan se desconectarán después de aproximadamente 45 segundos. Esta opción se aplica solo a la versión 2 del protocolo.
Para las opciones del cliente, consulte la explicación en man ssh_config
:
ServerAliveInterval
Establece un intervalo de tiempo de espera en segundos después del cual, si no se han recibido datos del servidor,
ssh
enviará un mensaje a través del canal encriptado para solicitar una respuesta del servidor. El valor predeterminado es 0, lo que indica que estos mensajes no se enviarán al servidor. Esta opción se aplica solo a la versión 2 del protocolo.
ServerAliveCountMax
El valor predeterminado es 3. Si, por ejemplo,
ServerAliveInterval
se establece en 15 yServerAliveCountMax
se deja en el valor predeterminado, si el servidor deja de responder,ssh
se desconectará después de aproximadamente 45 segundos. Esta opción se aplica solo a la versión 2 del protocolo.
Basado en lo anterior, 0 significa que está deshabilitado. Por lo tanto, debe establecer estos valores lo suficientemente altos para evitar Tuberia rota error.
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 activa cuando inicie su computadora.
No existe tal configuración para ssh que mantendrá viva la conexión de esa manera. SSH usa TCP, para empezar, necesita el protocolo de enlace de tres vías y luego mantenerse vivo después de un tiempo de inactividad. Cuando apaga / hiberna, todas sus conexiones TCP se cierran con FIN. No hay manera 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.
Puedes avalar nuestra faena poniendo un comentario o dejando una valoración te damos las gracias.