Tempo limite do SSH do Linux [fechado]

10

Tenho lutado com um par de tempos limite do sistema após X minutos de inatividade e não tenho certeza de como consertá-lo.

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

No entanto, conecte-se à mesma caixa em casa e às vezes atingirá o tempo limite após alguns segundos, outras após alguns minutos.

Eu acho que é a minha conexão à Internet, no entanto, se eu estiver usando ativamente a caixa, ela permanecerá conectada.

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

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

Anthony Fornito
fonte
4
A documentação para o seu cliente (sem nome).
precisa saber é o seguinte

Respostas:

14

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

Nos clientes Linux ou OSX, você pode criar um arquivo de configuração para o usuário em ~ / .ssh / config na sua estação de trabalho. Adicione a seguinte diretiva. No meu caso, quero que ele afete todos os hosts, portanto, coloque-o em Host *.

Host *
    ServerAliveInterval 60

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

No lado do servidor, verifique se TCPKeepAlive está definido como yes.

grep TCPKeepAlive /etc/ssh/sshd_config
TCPKeepAlive yes

Se você estiver no Windows, precisará fazer referência à documentação do seu cliente.

adições digitais
fonte
11

O Linux não atinge o tempo limite de conexões SSH inativas. Você pode deixar uma conexão SSH aberta indefinidamente e, desde que nenhum ponto de extremidade tenha sido reinicializado ou tenha um novo endereço IP, a conexão continuará funcionando quando você a acessar após um longo tempo inativo.

No entanto, se houver alguma caixa intermediária com estado (NAT, firewall etc.), é provável que o tempo limite das conexões ociosas seja excedido. O resultado disso é que, embora a conexão esteja ativa nas duas extremidades, os dois pontos de extremidade não podem mais se comunicar porque a caixa do meio se recusa a encaminhar quaisquer pacotes até que o cliente SSH abra uma nova conexão.

Se você sabe que o tempo limite do middlebox, você pode contornar o problema configurando ClientAliveIntervalem /etc/ssh/sshd_configno servidor ou ServerAliveIntervalno ~/.ssh/configno cliente. Para uma detecção ideal de conexões quebradas, é recomendável ativar as duas configurações. Isso também detectará conexões interrompidas quando um dos terminais tiver sido reinicializado ou obter 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 o seu problema. Um tempo limite aparente muito baixo pode ser causado por uma CGN sobrecarregada ou mal configurada. 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 seu ISP, algo bobo, como conexões de balanceamento de carga em vários CGNs que não compartilham o estado da conexão, você não poderá resolver o problema sozinho, simplesmente ajustando sua configuração SSH.

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

Kasperd
fonte