Por que meu tempo limite do ssh varia com a localização da rede?

15

Quando estou ssh'ed em um dos nossos servidores de escritório (que executam o Fedora 10) em casa, minha sessão expira depois de um período relativamente curto de atividade (5 minutos ou mais). Eu tentei usar TcpKeepAlive no lado do cliente, sem efeito.

A coisa que não entendo é que, se estou no escritório na LAN da empresa, posso deixar uma sessão inativa o dia todo sem que o tempo limite, então o comportamento parece depender da minha localização.

Alguma idéia de por que isso está acontecendo e como evitar tempos limites quando não estou na LAN? Estou usando o cliente de terminal no Mac OSX se isso ajudar.

UPDATE - A sugestão de Dave Drager de usar o ServerAliveInterval definido como diferente de zero com TcpKeepAlive=no funcionou para mim. Em relação a algumas das outras respostas, as configurações de ClientAlive ... não são aceitas pelo cliente SSH do Mac OSX.

    
por gareth_bowles 17.06.2009 / 17:31

5 respostas

6

Existe um bom artigo sobre este problema aqui .

Eles recomendam:

ssh -o TCPKeepAlive=yes

ou:

ssh -o TCPKeepAlive=no -o ServerAliveInterval=15

No entanto, tenho um problema no meu local de trabalho em que me desconecto das sessões, onde em casa elas estão bem. Eu acredito que meu firewall (SonicWall) pode estar flertando com o TCPKeepAlive, talvez por causa do NAT.

Meu cliente SSH, SecureCRT, felizmente tem uma opção para um protocolo "NO-OP", que acredito que basicamente envia um comando que não faz nada ao servidor. Ao ativar manualmente, posso permanecer conectado. Não tenho certeza do que o cliente do terminal MacOSX tem que é semelhante a isso. Existe um writeup sobre como para implementar "NO-OP" na linha de comando.

Finalmente, você pode querer usar o Wireshark ou outro sniffer para assistir a sua conexão TCP real para descobrir o que está acontecendo com ele. Essa seria a última maneira de ver porque ainda está desconectando de vez em quando.

    
por 17.06.2009 / 18:40
2

Isto é provavelmente porque quando você está se conectando de casa, você passa por um firewall que fecha a sessão TCP após um pequeno período de tempo. Mas o TcpKeepAlive deve evitar isso. Você ativou o TcpKeepAlive no lado do cliente ou no lado do servidor?

    
por 17.06.2009 / 17:40
2

Eu recebo isso o tempo todo na minha conexão Comcast. O problema é que o intervalo de manutenção do cliente do SSH é muito longo para o tempo limite configurado no caminho da rede. Se você estiver no Linux, poderá modificar os valores ServerAliveInterval e ServerAliveCounter para que sejam menores que seus padrões. Este valor é definido em segundos. O arquivo de configuração do sistema é encontrado (geralmente) em /etc/ssh/ssh_config . Configurar esses dois AND TcpKeepAlive deve ajudar a manter sua conexão.

    
por 17.06.2009 / 18:30
1

Como o radius diz, alguns firewalls de estado completo 'esquecem' uma conexão depois de certo tempo (geralmente configurável) e não permitem mais comunicação para a conexão; eles esperam que a conexão comece com um TCP SYN (eu me refiro à sua comunicação SSH aqui).

Existe outra possibilidade. O caminho de rede entre a sua casa e o escritório pode ter perdas (do tipo pacote). Quando você tenta digitar no cliente SSH, se o link parou por algum tempo, o cliente pode desistir e falhar.

A configuração do Keepalive no cliente tratará o primeiro caso aqui, mas não poderá ajudar no segundo caso. O firewall normalmente estaria no perímetro de seu escritório e, portanto, pode ser configurável. Isso também ajudaria no primeiro ponto.

Para verificar se você está tendo perdas de link intermitentes, você pode manter um 'ping' ativo em segundo plano na sua máquina cliente.

    
por 17.06.2009 / 18:36
0

Você também pode adicionar as configurações sugeridas por outras pessoas como padrão no seu arquivo ~/.ssh/config , assim você não precisa passá-las para ssh toda vez que iniciar uma conexão:

nano ~/.ssh/config e adicione:

TCPKeepAlive=no
ServerAliveInterval=15
    
por 14.08.2015 / 14:19