terminal de cuelgue cuando la conexión perdida y SSH es el

18

cuando ssh a un servidor a través de Internet en una pestaña de terminal gnome, si pierdo la conexión a Internet, la pestaña de terminal se bloqueará y no aceptará ninguna entrada. ¿Por qué se cuelgue?

¿Hay alguna forma de activar la pestaña del terminal, es decir, hacer que continúe ejecutando el proceso de shell local?

¿Cerrar la pestaña del terminal es la única forma?

StackExchange para todos
fuente

Respuestas:

20

Conexión SSH se cae automáticamente después de un período determinado de tiempo establecido por ClientAliveIntervaly ClientAliveCountMaxparámetros y sus equivalentes del lado del cliente. Si estos tiempos de espera son bastante altos, experimentará un caparazón congelado. Sin embargo, si utiliza OpenSSHusted no tiene que esperar a un tiempo de espera y puede forzar el cierre de una conexión utilizando caracteres de escape :

ESCAPE CHARACTERS
When a pseudo-terminal has been requested, ssh supports a number
of functions through the use of an escape character.  A single
tilde character can be sent as ~~ or by following the tilde by a
character other than those described below. The escape character
must always follow a newline to be interpreted as special. The
escape character can be changed in configuration files using the
EscapeChar configuration directive or on the command line by the
-e option.
The supported escapes (assuming the default ‘~’) are:

~.
    Disconnect.
(...)

Cuando la conexión se congela de prensa ~(que significa Shift+ `teclas al mismo tiempo), lo liberan y pulse .. Alternativamente, si trabaja con una conexión inestable o necesita estar conectado al servidor remoto todo el tiempo, puede usar autossh para renovar automáticamente la conexión perdida, es muy conveniente.

EDITAR :

Sin embargo, si ambos ClientAliveIntervaly ServerAliveIntervalse establecen explícitamente en 0 o no se establecen explícitamente y luego se establecen en 0 de forma predeterminada de acuerdo con sshd_configy ssh_configpáginas de manual, la configuración de tiempo de espera se establece en los siguientes archivos (de http://tldp.org/HOWTO/TCP- Keepalive-HOWTO / usingkeepalive.html ):

  # cat /proc/sys/net/ipv4/tcp_keepalive_time
  7200

  # cat /proc/sys/net/ipv4/tcp_keepalive_intvl
  75

  # cat /proc/sys/net/ipv4/tcp_keepalive_probes
  9

  The first two parameters are expressed in seconds, and the last is
  the pure number. This means that the keepalive routines wait for
  two hours (7200 secs) before sending the first keepalive probe,
  and then resend it every 75 seconds. If no ACK response is
  received for nine consecutive times, the connection is marked as
  broken.

Puede modificar estos 3 archivos con solo usar echoy ver que una sesión SSH congelada se desconecta de acuerdo con estos valores.

Arkadiusz Drabczyk
fuente
66
Me gustaría añadir que ssh sólo reconoce su carácter de escape en un principio, o después de un Intro. Cuando una conexión ssh se atasca, Enter es a menudo, pero no siempre es el último carácter que se ha pulsado previamente. Por lo tanto, probablemente sea mejor acostumbrarse a Enter ~ .la secuencia que termina la conexión.
egmont
Gracias. Todavía no tengo claro cómo /proc/sys/net/ipv4/tcp_keepalive*los archivos y ClientAliveIntervaly ServerAliveInterval trabajar juntos? ¿Están todos para la misma configuración, es decir, para mantener viva la conexión ssh? ¿Los archivos anteriores no son solo para conexiones ssh sino también para otras conexiones TCP?
StackExchange for All
Otra pregunta: por qué "Si estos tiempos de espera son bastante altos, experimentará un caparazón congelado". ¿Qué quiere decir con "los tiempos de espera son bastante altos"? ¿No está el shell siempre congelado, si falta actividad durante el período de tiempo especificado? ¿O quiere decir que en algunos casos de falta de actividad, el shell no está congelado sino que sale automáticamente?
StackExchange for All
@Tim: 1. /proc/sys/net/ipv4/tcp_keepalive*no sólo son para ssh(d), pero como se dice en el documento que he vinculado a:Remember that keepalive support, even if configured in the kernel, is not the default behavior in Linux. Programs must request keepalive control for their sockets using the setsockopt interface. There are relatively few programs implementing keepalive, but you can easily add keepalive support for most of them following the instructions explained later in this document.
Arkadiusz Drabczyk
@Tim: 2. Bastante alto significa 2 horas, por ejemplo, tendrá que esperar 2 horas antes de que se desconecte la sesión. Haga una prueba: conéctese con un host remoto, sshdelimine el control remoto o quite un cable y verifique cuándo una sesión congelada ssh saldrá por sí sola. Por frozen shelllo cáscara media que está inactivo, no toma ninguna tecla y no imprime nada.
Arkadiusz Drabczyk