Pregunta Forma de evitar el tiempo de espera de la conexión ssh y la congelación de la Terminal GNOME


Cuando me conecto a través de ssh a ciertos servidores, el tiempo de espera y "congela" el terminal (no acepta entrada, no se desconecta, no puede Ctrl-C matar el proceso ssh o cualquier cosa).

Esto está en Ubuntu gnome-terminal aunque parece estar pausando la entrada / salida del terminal, y no afecta el funcionamiento del software de la Terminal GNOME. Así que menos un error con gnome-terminal que una incoherencia molesta con ssh.

Entonces, ¿hay alguna forma de prevenir / recuperar el terminal de las conexiones ssh que han expirado?


217


origen


Posible duplicado de ¿Cómo mantener confiablemente abierto un túnel SSH? - Murmel


Respuestas:


sshd (el servidor) cierra la conexión si no escucha nada del cliente por un tiempo. Puede decirle a su cliente que envíe una señal de señal de vida al servidor de vez en cuando.

La configuración para esto está en el archivo ~/.ssh/config. Para enviar la señal cada cuatro minutos al host remoto, ponga lo siguiente en su ~/.ssh/config.

Host remotehost
  HostName remotehost.com
  ServerAliveInterval 240

Esto es lo que tengo en mi ~/.ssh/config.

Para habilitarlo para todos los hosts, use:

Host *
  ServerAliveInterval 240

También asegúrate de correr chmod 600 ~/.ssh/config, porque el archivo de configuración no debe ser legible por todo el mundo.


244



Gracias sblair por ayudarme con la redacción, es muy apreciado. Cambié "should not" (no debo) a "must not" (no debo) porque ssh comprueba los permisos del archivo y, si es legible en todo el mundo o en grupo, falla. - Ludwig Weinzierl
Esto no es lo que pidió el OP. Él no va a ser expulsado debido a la inactividad. Está intentando conectarse y su terminal está helada. - Cerin
Donde está esto ~/.ssh/config? - User
@User '~ /' representa su carpeta de inicio. '.ssh' es una carpeta dentro de su carpeta de inicio. - wkm
esto es inútil si su conexión se está perdiendo realmente ... - so12311


prensa Entrar, ~, . uno tras otro para desconectarse de una sesión congelada.

La sección "ESCAPE CHARACTERS" en la página del manual ssh explica los detalles subyacentes.


231



Esta respuesta me parece responder con mayor precisión a la pregunta, y en cualquier caso, fue la respuesta que estaba buscando. - CoatedMoose
Tenga en cuenta que necesita descomentar la línea EscapeChar ~ en /etc/ssh/ssh_config (o ~/.ssh/ssh_config si tu prefieres). - Aditya M P
@adityamenon No, EscapeChar ~ ya es el valor predeterminado incorporado. - Peter Eisentraut
@Mark la pregunta pregunta "¿hay alguna manera de evitar recuperar el terminal de las conexiones ssh? que ha excedido el tiempo de espera? "Énfasis mío. - CoatedMoose
A pesar de que era incorrecto en el contexto de la pregunta, esto es exactamente lo que quería. - Subin Sebastian


Aunque esta no es una respuesta directa a su pregunta, está muy relacionada con el problema que tiene. En lugar de tratar de mantener viva la conexión (todas las conexiones finalmente mueren) puede usar multiplexores terminales, como screen y tmux que mantienen viva la sesión en segundo plano, incluso si su terminal se desconecta.

Básicamente, cuando inicias sesión en el servidor SSH ejecutas inmediatamente screen que creará y adjuntará una nueva sesión:

$ screen

Luego continúe y haga su trabajo con el caparazón como lo haría normalmente. Ahora, si se corta la conexión, cuando puede volver a conectarse y volver a conectarse al servidor a través de SSH, obtiene una lista de las sesiones actuales con:

$ screen -ls

Para volver a conectar a una sesión:

$ screen -r <session>

dónde <session> es el PID o un nombre de sesión. ¡Volverás a conectarte a tu sesión y podrás continuar desde donde lo dejaste!

Incluso puede desconectar la sesión y volver a conectar desde su casa para recoger desde el punto exacto donde la dejó. Para desconectar la sesión que usa C-a seguido por C-d (eso es Control + A y entonces Control + D)

Ahi esta tutorial simple en línea también.

Utilizando screen y tmux en servidores remotos se considera una mejores prácticas y es muy recomendable. Algunas personas llegan tan lejos como para tener screen como su shell de inicio de sesión predeterminado, por lo que cuando se conectan inmediatamente comienzan una nueva screen sesión.


38



otra alternativa es usar mosh: mosh.mit.edu - Zombies
Esto es especialmente útil si está utilizando un punto de acceso o wifi que ocasionalmente se desconecta. - Randall


Intenta anexar -o ServerAliveInterval=30 a su cadena de conexión (30 significa 30 segundos y, por supuesto, se puede ajustar)


11





También puede establecer un intervalo de tiempo de espera inactivo desde el lado del servidor SSH:

Archivo: /etc/ssh/ssh_config

Contenido:

ClientAliveInterval XX
ClientAliveCountMax YY

Esto funciona exactamente de la misma manera que la configuración del cliente, pero los paquetes nulos se envían desde el servidor, en lugar del cliente.

Extraído de:

http://www.sysadmit.com/2016/02/linux-y-vmware-ssh-evitar-desconexion.html


5





Para las personas que quieren evitar que el cliente agote el tiempo en primer lugar.

Podrías tratar de establecer ConnectTimeout 0 en el archivo de configuración. El valor 0 significa que la conexión se mantendrá viva Indefinidamente a menos que esté cerrada.

su archivo config (o ssh_config) podría verse así:

Host *
   ConnectTimeout 0

1