Cómo evitar que SSH se desconecte si ha estado inactivo durante un tiempo

51

Tengo una conexión ssh a una máquina que se desconecta después de 30 minutos sin entrada del usuario. Sin embargo, si empiezo algo así top, la conexión se mantiene viva. Como esta es la máquina de un cliente, no puedo volver a configurar el servidor SSH de esa máquina. Así que estoy buscando una manera de detectar automáticamente la inactividad y comenzar algo así top. Una especie de "protector de pantalla" para Bash.

Sé que puedo hacer eso screen, pero desafortunadamente screenno está instalado y no puedo instalar el software. Entonces necesito usar lo que ofrece Bash.

Para que quede claro: estoy buscando una solución que empiezo una vez después de iniciar sesión, y luego quiero usar esa terminal, alejarme, regresar dos horas más tarde y continuar trabajando, sin escribir nada antes de alejarme. Además, no estoy buscando hacer túneles (para eso recomiendo la gran herramienta sshuttle )

¿Algunas ideas?

Isaac
fuente
Solo una nota rápida para aclarar la pantalla y Keepalive no es lo mismo: por ejemplo, si el cliente ssh o el servidor se desconectan, su sesión ssh finalizará incluso si tiene KeepAlive activado, mientras que un shell de pantalla no se cerrará .
MariusMatutiae

Respuestas:

78

Para que quede claro: estoy buscando una solución que empiezo una vez después de iniciar sesión, y luego quiero usar esa terminal, alejarme, regresar dos horas más tarde y continuar trabajando, sin escribir nada antes de alejarme.

El problema es que hay algo (generalmente un firewall o equilibrador de carga) que está eliminando las sesiones inactivas. Si configura las keepalives de sesión, las keepalives evitarán que los dispositivos de red consideren la sesión como inactiva.

Arreglo de Linux / Unix / Cygwin OpenSSH :
El arreglo más simple es habilitar las capacidades de cliente ssh; este ejemplo enviará un ssh keepalive cada 60 segundos:

ssh -o "ServerAliveInterval 60" <SERVER_ADDRESS>

Si desea habilitar esto en todas sus sesiones, colóquelo en su /etc/ssh/ssh_configo ~/.ssh/config:

ServerAliveInterval 60

Para obtener más información, consulte la página de ssh_configmanual.

Masilla Fix :

Guarde esto en su "Configuración predeterminada" PuTTY ...

  • Haga clic en conexión
  • Escriba 60 en "Segundos entre keepalives"

putty_screenshot

Mike Pennington
fuente
21

Además de la respuesta de Mike Pennigton , me gustaría informarle ServerAliveCountMaxtambién.

  • El ServerAliveIntervalenviará un keepalive cada x segundos (el valor predeterminado es 0 , lo que deshabilita esta función si no se establece en otra cosa).
  • Esto se hará en ServerAliveCountMaxocasiones si no se recibe respuesta. El valor predeterminado de ServerAliveCountMaxes 3 (consulte la página de manual ssh_config ).

Ejemplo: Si se establece ServerAliveIntervala 60 y la licencia ServerAliveCountMaxcomo es, esto significa que el mantenimiento de conexión sólo se esperará a 3 * 60 = 180 seconds = 3 minutos antes de chihuahuenses.

Para aumentar esto a, por ejemplo, 2 horas de intentar mantener viva la conexión, puede hacer lo siguiente:

Por comando:

Por lo tanto, debe considerar establecer

ssh -o "ServerAliveInterval 60" -o "ServerAliveCountMax 120" <SERVER_ADDRESS>

Persistente:

Para hacerlo persistente, escríbalo en /etc/ssh/ssh_config(se aplicará en todo el sistema) o ~/.ssh/config(se aplicará solo para el usuario):

ServerAliveInterval 60
ServerAliveCountMax 120

Nota

Como señaló correctamente , esto podría no ser lo que desea, dependiendo de su situación:

  • Si desea finalizar rápidamente la sesión tan pronto como el servidor ya no responda, debe elegir un valor bajo para ServerAliveCountMax.
  • Si usted está más interesado en mantener una conexión ya establecida (por ejemplo, que ir en tren y tienen una alta latencia), debe elegir un valor más alto para ServerAliveCountMaxpermitir sshque seguir tratando de restablecer la conexión.

Ver también:

Murmel
fuente
1
Lo siento, pero esto está mal. ServerAliveCountMaxespecifica la cantidad de mensajes vivos del servidor que pueden enviarse sin recibir ningún mensaje del servidor. Si desea sshsalir después de que se congele (para poder reiniciarlo), debe configurarlo ServerAliveCountMaxen un número bajo . Vea la página de manual OP vinculada.
dislick
@dislick Tuve que pensar un poco sobre esto, pero creo que tienes razón dependiendo del contexto, por lo tanto, agregué una nota para enfatizar el contexto.
Murmel
2

Estoy usando Mobaxterm y también me he encontrado con este problema. Mobaxterm también incluye una opción para mantener vivo al cliente cuando el cliente está inactivo. Ir a Settings -> Configuration -> SSH. Hay una sección titulada SSH settings, marque la opción SSH keepalive. Entonces el problema debería desaparecer.

ingrese la descripción de la imagen aquí

jdhao
fuente
funciona el "SSH keepalive" en la edición gratuita ... mi sesión se desconecta incluso después de comprobar esta opción
samshers
Si, funciona. Su problema puede tener otras causas.
jdhao