Tempo Limite SSH do Linux [fechado]

9

Eu tenho lutado com um par de tempo fora do sistema após X minutos de inatividade e não sei como consertar isso.

Eu tenho uma caixa do CentOS no meu escritório. Conectar-se ao SSH não pode tocá-lo por 2 horas e ainda está vivo quando eu executar algo.

No entanto, conecte-se a essa mesma caixa em casa, e às vezes ela atingirá o tempo limite após alguns segundos, algumas vezes depois de alguns minutos.

Eu acho que é minha conexão com a internet, mas se eu estiver usando ativamente a caixa, ela ficará conectada.

No entanto, se eu parar de digitar algo no Google, ele mostrará uma mensagem desconectada e eu tenho que reconectar.

Qualquer coisa que eu possa verificar para ver o que está acontecendo?

    
por Anthony Fornito 08.04.2016 / 21:11

2 respostas

14

A primeira coisa que você deve verificar é definir o ServerAliveInterval. Isso deve ser definido em sua estação de trabalho.

Em clientes Linux ou OSX, você pode criar um arquivo de configuração para seu usuário em ~ / .ssh / config em sua estação de trabalho. Adicione a seguinte diretiva. No meu caso eu quero que isso afete todos os hosts, então eu coloco em Host *.

Host *
    ServerAliveInterval 60

Isso enviará uma instrução noop a cada 60 segundos para manter a conexão aberta. Você pode querer ajustar o valor para atender às suas necessidades.

No lado do servidor, certifique-se de que TCPKeepAlive esteja definido como sim.

grep TCPKeepAlive /etc/ssh/sshd_config
TCPKeepAlive yes

Se você estiver no Windows, precisará consultar a documentação do seu cliente.

    
por 08.04.2016 / 21:50
11

O Linux não desacelera as conexões SSH ociosas. Você pode deixar uma conexão SSH aberta indefinidamente e, desde que nenhum ponto de extremidade tenha sido reinicializado ou tenha recebido um novo endereço IP, a conexão continuará funcionando quando você acessá-lo após um longo tempo ocioso.

No entanto, se houver alguma caixa central com informações de estado (NAT, firewall etc.), é provável que atinjam o tempo limite de conexões inativas. O resultado disso é que, mesmo que a conexão esteja viva em ambas as extremidades, os dois terminais não podem se comunicar mais porque o middlebox se recusa a encaminhar todos os pacotes até que o cliente SSH abra uma nova conexão.

Se você souber o tempo limite da middlebox, poderá solucionar o problema configurando ClientAliveInterval in /etc/ssh/sshd_config no servidor ou ServerAliveInterval in ~/.ssh/config no cliente. Para a detecção ideal de conexões interrompidas, é aconselhável habilitar ambas as configurações. Isso também detectará conexões quebradas quando um ponto de extremidade for reinicializado ou tiver recebido um novo endereço IP.

Como você indica que o tempo limite às vezes parece ser tão baixo quanto alguns segundos, isso pode não ser suficiente para resolver seu problema. Um tempo limite aparente muito baixo pode ser causado por um CGN sobrecarregado ou mal configurado. Você precisa inspecionar o tráfego em vários pontos do caminho de comunicação para descobrir se um CGN é responsável pelas falhas.

Se as falhas forem causadas pelo ISP fazendo algo tolo, como conexões de balanceamento de carga em vários CGNs que não compartilham o estado da conexão, você não poderá corrigir o problema sozinho simplesmente ajustando a configuração do SSH.

Se você estiver preso a um ISP com um CGN não confiável que ele se recusa a corrigir, as únicas opções restantes que eu conheço são atualizar cliente e servidor para versões de kernel com suporte a MPTCP ou usar uma solução de encapsulamento projetada tolerar mudanças espontâneas nos mapeamentos de portas no NAT.

    
por 09.04.2016 / 21:58

Tags