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

219

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 nem nada).

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

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

    
por Kzqai 21.01.2010 / 00:33

6 respostas

247

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, coloque o seguinte no seu ~/.ssh/config .

Host remotehost
  HostName remotehost.com
  ServerAliveInterval 240

Isso é o que eu tenho no meu ~/.ssh/config .

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

Host *
  ServerAliveInterval 240

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

    
por 21.01.2010 / 00:53
234

Pressione Digite , ~ , . 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.

    
por 21.01.2010 / 00:44
38

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 ativa (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

Depois, vá em frente e faça seu trabalho com o shell como faria normalmente. Agora, se a conexão cair, quando você voltar a ficar on-line e reconectar-se ao servidor por SSH, você verá uma lista das sessões atuais com:

$ screen -ls

Para reconectar a uma sessão:

$ screen -r <session>

em que <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-se de casa para pegar o ponto exato em que parou. Para desanexar a sessão, use C-a seguido por C-d (que é Control + A e, em seguida, Control + D ).

tutorial online simples também.

Usar screen e tmux em servidores remotos é considerado uma melhor prática e é altamente recomendado . Algumas pessoas chegam a ter screen como seu shell de login padrão, portanto, quando se conectam, iniciam imediatamente uma nova sessão screen .

    
por 03.07.2012 / 03:28
11

Tente anexar -o ServerAliveInterval=30 à sua string de conexão ( 30 significa 30 segundos e, claro, pode ser ajustado)

    
por 06.02.2014 / 15:13
5

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 forma que a configuração do cliente, mas os pacotes nulos são enviados do servidor, em vez do cliente.

Extraído de:

link

    
por 12.02.2016 / 23:45
1

Para pessoas que querem impedir que o cliente atinja o tempo limite em primeiro lugar.

Você pode 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
    
por 17.12.2015 / 03:19