terminal travar quando a conexão perdida e o ssh estiverem ligados

18

quando ssh para um servidor pela internet em uma guia do terminal gnome, se eu perder a conexão com a internet, a guia do terminal ficará travada e não aceitará nenhuma entrada. Por que está pendurado?

Existe alguma maneira de ativar a guia do terminal, ou seja, fazê-lo continuar executando o processo de shell local?

Fechar a guia do terminal é a única maneira?

Tim
fonte

Respostas:

20

A conexão SSH é desativada automaticamente após um período de tempo especificado por ClientAliveIntervale ClientAliveCountMaxparâmetros e seus equivalentes no lado do cliente. Se esses tempos limite forem muito altos, você experimentará uma concha congelada. No entanto, se você usar OpenSSH, não precisará esperar um tempo limite e poderá forçar o fechamento de uma conexão usando 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.
(...)

Quando a conexão congelar, pressione ~(que significa as teclas Shift+ `juntas), solte-o e pressione .. Como alternativa, se você trabalha com uma conexão instável ou precisa estar conectado ao servidor remoto o tempo todo, pode usar o autossh para renovar automaticamente a conexão perdida, é muito conveniente.

EDIT :

No entanto, se ambos ClientAliveIntervale ServerAliveIntervalsão definidos como 0 explicitamente ou não são definidos explicitamente e são definidos como 0 por padrão, de acordo com sshd_confige ssh_configmanpages, as configurações de tempo limite são definidas nos seguintes arquivos (em 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.

Você pode modificar esses três arquivos apenas usando echoe veja que uma sessão SSH congelada é desconectada de acordo com esses valores.

Arkadiusz Drabczyk
fonte
6
Eu gostaria de acrescentar que o ssh reconhece apenas seu caractere de escape inicialmente ou depois de um Enter. Quando uma conexão ssh fica travada, Enter geralmente é, mas nem sempre, o último caractere que você pressionou anteriormente. Portanto, provavelmente é melhor se acostumar com Enter ~ .a sequência que encerra a conexão.
Egmont
Obrigado. Eu ainda não estou claro como /proc/sys/net/ipv4/tcp_keepalive*arquivos e ClientAliveIntervale ServerAliveInterval trabalhar juntos? Eles são todos para as mesmas configurações, ou seja, para manter a conexão ssh ativa? Os arquivos anteriores não são apenas para conexões ssh, mas também outras conexões TCP?
Tim
Outra pergunta: por que "Se esses tempos limite forem muito altos, você experimentará uma concha congelada". O que você quer dizer com "tempos limite são bastante altos"? O shell não está sempre congelado, se houver falta de atividade pelo período especificado? ou, em alguns casos de falta de atividade, o shell não está congelado, mas sai automaticamente?
Tim
@ Tim: 1. /proc/sys/net/ipv4/tcp_keepalive*não são apenas para, ssh(d)mas como diz o documento ao qual 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.
vinculei
@ Tim: 2. Muito alto significa 2 horas, por exemplo - você terá que esperar 2 horas antes que a sessão seja desconectada. Faça um teste - conecte-se a um host remoto, mate sshd-o ou remova um cabo e verifique quando uma sessão congelada ssh sairá sozinha. Por frozen shellI shell média que está inativo, não tomar quaisquer chaves e não imprime nada.
Arkadiusz Drabczyk