Português do Brasil English
Devin no Facebook  Devin no Twitter  RSS do Site 
Programas    

ssh: problemas com sessões ssh inativas?


Comentários  7
Visualizações  
59.719

Quem é administrador de sistemas com certeza já deve ter passado por algo assim… Aliás, muita gente que acessa servidores remotamente via SSH já passou por isso. Eu mesmo já fiquei com muita raiva quando estava com diversas janelas com sessões SSH em vários lugares, editando e visualizando arquivos de configuração, esperando uma cópia de arquivos grande ou uma compactação bzip2 demorada…. Quando de repente:

Read from remote host servidor.remoto.com.br: Connection reset by peer
Connection to servidor.remoto.com.br closed.

É isso… você perde o que estava fazendo e tem que efetuar login novamente na máquina remota… Multiplique isso por cada uma das várias janelas com conexões abertas e você tem um grande de um stress.

A explicação para isso é o TCP Timeout. Alguns roteadores, para manter a rede “mais limpa“, verificam constantemente todas as conexões estabelecidas para ver se alguma delas está ociosa (sem nenhum tráfego de dados). Quando é encontrada uma conexão neste estado, ele verifica se essa conexão está assim há X segundos (de acordo com a configuração do TCP Timeout) e se estiver, ele desconecta. Com isso, as conexões que teoricamente estavam “travadas” são limpas e o canal fica limpo para novas conexões, ajudando assim a descongestionar os recursos.

Só que no nosso caso, apesar da conexão SSH ficar ociosa, não quer dizer que ela está travada ou com defeito, então por favor roteador, pare de fechar estas conexões!

A solução: Keep Alive!

Para que não ocorra mais estas quedas nas conexões, podemos usar o recurso de Keep Alive, que traduzindo para português significa “Manter Vivo”. O Keep Alive é um conceito que existe em diversas aplicações e consiste em um pequeno pacote descartável e sem nenhuma importância, que é mandado para o servidor de tempos em tempos. Isso faz com que a conexão TCP continue aberta e não feche por ociosidade ou outra razão.

Para o nosso problema, podemos configurar os clientes SSH para mandar os pacotes de Keep Alive em intervalos de por exemplo, 30 segundos.

Como fazer no Linux / Unix

Em sistemas Linux e semelhantes, geralmente utilizamos o cliente de SSH chamado OpenSSH. O arquivo de configuração do cliente do SSH é:

  • /etc/ssh/ssh_config

Então edite-o e adicione a seguinte linha no final do arquivo:

ServerAliveInterval 30

Pronto. Das próximas vezes que você se conectar via comando ssh em servidores remotos, o OpenSSH irá mandar os pacotes de Keep Alive de 30 em 30 segundos, e assim sua conexão não irá cair por TCP Timeout.

Se você estiver com pressa e não quiser editar um arquivo de configuração, pode fazer isso na própria linha de comando quando for executar o ssh, adicionando a opção “-o TCPKeepAlive=yes”, exemplo:

ssh -o TCPKeepAlive=yes servidor.remoto.com.br

Como fazer no Windows

No Windows, acho que 99,9% das pessoas que acessam servidores remotos via SSH utilizam o cliente PuTTY. Neste caso, para habilitar os pacotes de Keep Alive, basta preencher o campo mostrado na imagem abaixo:

PuTTY KeepAlive

Ou seja, na configuração antes da conexão, em Connection -> Seconds between keepalives e colocar a quantidade em segundos entre os pacotes, que no nosso caso é 30.

59.719

Comentários  7
Visualizações  
59.719


TagsLeia também

Apaixonado por Linux e administração de sistemas. Viciado em Internet, servidores, e em passar conhecimento. Idealizador do Devin, tem como meta aprender e ensinar muito Linux, o que ele vem fazendo desde 1997 :-)


Leia também



Comentários

7 respostas para “ssh: problemas com sessões ssh inativas?”

  1. Jean D'Elboux D disse:

    As vezes o timeout acontece no shell, e não na conexão. Nesse caso a solução é você digitar no seu shell: TMOUT=0

    Isso garante que o shell não expire se inativo por mais de 30 segundos (que é o default no Korn shell do Solaris, por exemplo)

  2. Danilo Luvizotto disse:

    Para evitar problemas desse tipo e de outras causas de queda de conexão, normalmente eu abro uma sessão do screen no servidor remoto. Dessa forma, se a conexão cair, quando eu reconectar continuo da onde parou.

  3. pqatsi disse:

    Eu tinha mandado no Sysadmin do Facebook, mas estimular a leitura do site é bacana. Eu prefiro o uso do MOSH (http://mosh.mit.edu) que evita qualquer problema da transação em TCP.

  4. Douglas Silva disse:

    Muito boa dica.

  5. Lia disse:

    Depois que instalei o windows 7pro.fica aparecendo esse tipo de aviso na conexão.Quem deve ajustar?quem instalou o SO?

  6. Pedro disse:

    Me ajudou bastante! Muito obrigado!

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *