Questão Maneira de evitar o tempo limite de conexão ssh e o congelamento do Terminal do GNOME


Quando eu me conecto via ssh a certos servidores, ele expira e "congela" o terminal (não aceita entrada, não desconecta, não pode Ctrl-C para matar o processo ssh ou qualquer coisa).

Isso está no Ubuntu gnome-terminal embora pareça pausar a entrada / saída do terminal e não afete a operação do próprio software do Terminal do GNOME. Então menos um bug com gnome-terminal do que uma incoerência irritante com o ssh.

Então, existe uma maneira de evitar / recuperar o terminal das conexões ssh que expiraram?


217


origem


Duplicação possível de Como manter de forma confiável um túnel SSH aberto? - Murmel


Respostas:


O sshd (o servidor) fecha a conexão se não ouvir nada do cliente por um tempo. Você pode dizer ao seu cliente para enviar um sinal de sinal de vida ao servidor de vez em quando.

A configuração para isso está no arquivo ~/.ssh/config. Para enviar o sinal a cada quatro minutos para o remotehost, colocar o seguinte em seu ~/.ssh/config.

Host remotehost
  HostName remotehost.com
  ServerAliveInterval 240

Isso é o que eu tenho na minha ~/.ssh/config.

Para ativá-lo para todos os hosts, use:

Host *
  ServerAliveInterval 240

Também certifique-se de executar chmod 600 ~/.ssh/config, porque o arquivo de configuração não deve ser legível por todos.


244



Obrigado por me ajudar com o texto, é muito apreciado. Eu mudei "não deve" de volta para "não deve" porque ssh verifica as permissões do arquivo e se é mundo ou grupo legível falha. - Ludwig Weinzierl
Isto não é o que o OP pediu. Ele não está sendo expulso por inatividade. Ele está tentando se conectar e seu terminal está congelando. - Cerin
Onde é isso ~/.ssh/config? - User
@User '~ /' representa sua pasta pessoal. '.ssh' é uma pasta dentro da sua pasta pessoal. - wkm
isso é inútil se a sua conexão estiver sendo perdida ... - so12311


pressione Entrar, ~, . um após o outro para desconectar de uma sessão congelada.

A seção "ESCAPE CHARACTERS" na página man do ssh explica os detalhes subjacentes.


231



Esta resposta parece-me responder com maior precisão à pergunta e, em qualquer caso, foi a resposta que eu estava procurando. - CoatedMoose
Note que você precisa descomentar a linha EscapeChar ~ dentro /etc/ssh/ssh_config (ou ~/.ssh/ssh_config se você preferir). - Aditya M P
@adityamenon Não, EscapeChar ~ já é o padrão interno. - Peter Eisentraut
@Mark a pergunta pergunta "existe uma maneira de evitar recuperar o terminal de conexões ssh que expiraram"A ênfase é minha. - CoatedMoose
Eventhough foi incorreto no contexto da questão, isso é exatamente o que eu queria. - Subin Sebastian


Mesmo que isso não seja uma resposta direta à sua pergunta, ela está altamente relacionada ao problema que você tem. Em vez de tentar manter a conexão viva (todas as conexões eventualmente morrem) você pode usar multiplexadores de terminal, como screen e tmux que mantêm a sessão ativa em segundo plano, mesmo que seu terminal seja desconectado.

Essencialmente, quando você faz login no servidor SSH, você executa imediatamente screen que criará e anexará uma nova sessão:

$ screen

Então você vai em frente e faz seu trabalho com o shell como faria normalmente. Agora, se a conexão cair, quando você puder ficar on-line novamente e reconectar-se ao servidor por meio do SSH, você verá uma lista com as sessões atuais:

$ screen -ls

Para reconectar a uma sessão:

$ screen -r <session>

Onde <session> é o PID ou um nome de sessão. Você será reconectado à sua sessão e poderá continuar de onde parou!

Você pode até mesmo separar a sessão e reconectar a partir de casa para pegar o ponto exato em que parou. Para desanexar a sessão que você usa C-a Seguido por C-d (isso é Control + A e depois Control + D).

Há sim tutorial on-line simples também.

Usando screen e tmux em servidores remotos é considerado um melhor pratica e é altamente recomendado. Algumas pessoas chegam a ponto de ter screen como seu shell de login padrão, então quando eles se conectam eles imediatamente iniciam um novo screen sessão.


38



Outra alternativa é usar mosh: mosh.mit.edu - Zombies
Isso é especialmente útil se você estiver usando um hotspot ou Wi-Fi que ocasionalmente seja desativado. - Randall


Tente anexar -o ServerAliveInterval=30 para sua seqüência de conexão (30 significa 30 segundos e pode, claro, ser ajustado)


11





Você também pode definir um intervalo de tempo limite ocioso do lado do servidor SSH:

Arquivo: /etc/ssh/ssh_config

Conteúdo:

ClientAliveInterval XX
ClientAliveCountMax YY

Isso funciona exatamente da mesma maneira que a configuração do cliente, mas os pacotes nulos são enviados do servidor, em vez do cliente.

Extraído de:

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


5





Para pessoas que querem impedir que o cliente atinja o tempo limite.

Você poderia tentar definir ConnectTimeout 0 no arquivo de configuração. O valor 0 significa que a conexão será mantida ativa Indefinidamente, a menos que seja fechada.

seu arquivo de configuração (ou ssh_config) pode ter esta aparência:

Host *
   ConnectTimeout 0

1