Quando conecto via ssh a determinados servidores, ele atinge o tempo limite e "congela" o terminal (não aceita entrada, não desconecta, não é possível pressionar Ctrl-C para interromper o processo ssh ou algo assim).
Isso ocorre no Ubuntu, gnome-terminal
embora pareça estar pausando a entrada / saída do terminal e não afeta a operação do próprio software do Terminal GNOME. Portanto, menos um bug do gnome-terminal
que uma inconsistência irritante com o ssh.
Portanto, existe uma maneira de impedir / recuperar o terminal das conexões ssh que atingiram o tempo limite?
ssh
terminal
timeout
gnome-terminal
Kzqai
fonte
fonte
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 vida útil ao servidor de vez em quando.
A configuração para isso é no arquivo
~/.ssh/config
. Para enviar o sinal a cada quatro minutos para o host remoto, coloque o seguinte em seu~/.ssh/config
.Isto é o que eu tenho no meu
~/.ssh/config
.Para habilitá-lo para todos os hosts, use:
Certifique-se também de executar
chmod 600 ~/.ssh/config
, porque o arquivo de configuração não deve ser legível pelo mundo.fonte
~/.ssh/config
?Imprensa Enter, ~, .um após o outro para desconectar de uma sessão congelado.
A seção "ESCAPE PERSONAGENS" na página de manual do ssh explica os detalhes subjacentes.
fonte
EscapeChar ~
em/etc/ssh/ssh_config
(ou~/.ssh/ssh_config
se você preferir).EscapeChar ~
já é o padrão interno .Mesmo que essa 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 acabam), você pode usar multiplexadores de terminal, como
screen
etmux
que mantêm a sessão ativa em segundo plano, mesmo que seu terminal seja desconectado.Essencialmente, ao fazer login no servidor SSH, você executa imediatamente o
screen
que criará e anexará uma nova sessão:Em seguida, prossiga e faça seu trabalho com o shell como faria normalmente. Agora, se a conexão cair, quando você puder voltar a ficar online e reconectar-se ao servidor por SSH, você verá uma lista das sessões atuais:
Para reconectar a uma sessão:
onde
<session>
é o PID ou o nome da sessão. Você será reconectado à sua sessão e poderá continuar de onde parou!Você pode até desconectar a sessão e reconectar-se de casa para pegar o ponto exato em que parou. Para desanexar a sessão que você usa, é
C-a
seguido porC-d
(Control + A
depois e depoisControl + D
).Também existe um tutorial online simples .
Usar
screen
etmux
em servidores remotos é considerado uma prática recomendada e é altamente recomendado . Algumas pessoas chegam ao ponto de terscreen
seu shell de login padrão; portanto, quando se conectam, iniciam imediatamente uma novascreen
sessão.fonte
Tente anexar
-o ServerAliveInterval=30
à sua string de conexão (30
significa 30 segundos e, é claro, pode ser ajustado)fonte
Você também pode definir um intervalo de tempo limite inativo no lado do servidor SSH:
Arquivo:
/etc/ssh/ssh_config
Conteúdo:
Isso funciona exatamente da mesma maneira que a configuração do cliente, mas pacotes nulos são enviados do servidor e não do cliente.
Extraído de:
http://www.sysadmit.com/2016/02/linux-y-vmware-ssh-evitar-desconexion.html
fonte
Para pessoas que desejam 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 ficar assim:
fonte