Poupe até 53% em Servidores VPS, escolha agora. Oferta limitada.

Como solucionar problemas de timeout no SSH em VPS Linux: Guia Completo

13 min de leitura  ·  Guia técnico

Timeout no SSH é um problema comum em servidores VPS Linux que ocorre quando a conexão é interrompida após um período de inatividade. Isso acontece devido a configurações de segurança no servidor ou em firewalls intermediários. Para solucionar esse problema, você precisará ajustar parâmetros de configuração tanto no cliente quanto no servidor SSH, garantindo conexões estáveis mesmo durante longos períodos de inatividade.

Pré-requisitos

  • Acesso root ou sudo ao servidor VPS Linux
  • Cliente SSH instalado em sua máquina local (OpenSSH, PuTTY, etc.)
  • Conhecimentos básicos de linha de comando Linux
  • Editor de texto como nano, vim ou similar
  • Permissão para reiniciar o serviço SSH no servidor

Entendendo o problema de timeout no SSH

Os timeouts no SSH ocorrem quando a conexão é encerrada automaticamente após um período de inatividade. Isso pode ser extremamente frustrante, especialmente quando você está realizando tarefas que exigem longos períodos de monitoramento ou quando está trabalhando em uma conexão de rede instável.

As principais causas de timeout no SSH incluem:

  • Configurações padrão restritivas no servidor SSH
  • Firewalls ou roteadores que encerram conexões inativas
  • Problemas de rede intermitentes
  • Configurações inadequadas no cliente SSH
  • NAT (Network Address Translation) que descarta conexões inativas

Antes de implementar as soluções, é importante verificar os logs do sistema para identificar a causa exata do timeout. Você pode examinar os logs SSH com o seguinte comando:

sudo journalctl -u sshd

Ou, em sistemas mais antigos:

sudo cat /var/log/auth.log | grep ssh

Procure por mensagens que indiquem "timeout", "connection closed" ou "disconnected".

Configurando o servidor SSH para evitar timeouts

A configuração do servidor SSH é o primeiro passo para resolver problemas de timeout. O arquivo principal de configuração do SSH está localizado em /etc/ssh/sshd_config. Vamos modificá-lo para aumentar o tempo de inatividade permitido.

  1. Abra o arquivo de configuração do SSH com seu editor de texto preferido:

    sudo nano /etc/ssh/sshd_config
  2. Procure pelas linhas que contêm ClientAliveInterval e ClientAliveCountMax. Se não existirem, adicione-as ao final do arquivo:

    # Configuração para evitar timeouts
    ClientAliveInterval 60
    ClientAliveCountMax 3

    Estas configurações significam:

    • ClientAliveInterval 60: O servidor enviará um pacote de keep-alive a cada 60 segundos para verificar se o cliente ainda está ativo.
    • ClientAliveCountMax 3: O servidor tolerará até 3 pacotes de keep-alive sem resposta antes de encerrar a conexão (ou seja, 3 minutos de inatividade total).
  3. Verifique também se a opção TCPKeepAlive está habilitada:

    TCPKeepAlive yes
  4. Salve o arquivo e saia do editor (no nano: Ctrl+O, Enter, Ctrl+X).

  5. Reinicie o serviço SSH para aplicar as alterações:

    sudo systemctl restart sshd

    Em sistemas mais antigos que não usam systemd:

    sudo service ssh restart

Atenção: Ao reiniciar o serviço SSH, suas conexões atuais não serão afetadas, mas é recomendável ter um método alternativo de acesso ao servidor caso algo dê errado.

Configurando o cliente SSH para manter a conexão ativa

Além de configurar o servidor, também é importante ajustar as configurações do cliente SSH para evitar timeouts. Isso é especialmente útil quando você não tem acesso administrativo ao servidor ou quando precisa se conectar a vários servidores diferentes.

Configuração para todos os servidores

Para configurar o cliente SSH para manter conexões ativas com todos os servidores:

  1. Crie ou edite o arquivo de configuração SSH do cliente:

    nano ~/.ssh/config
  2. Adicione as seguintes linhas:

    Host *
        ServerAliveInterval 60
        ServerAliveCountMax 3
        TCPKeepAlive yes

    Estas configurações significam:

    • ServerAliveInterval 60: O cliente enviará um pacote de keep-alive a cada 60 segundos.
    • ServerAliveCountMax 3: O cliente tolerará até 3 pacotes de keep-alive sem resposta antes de considerar a conexão perdida.
    • TCPKeepAlive yes: Habilita os pacotes TCP keep-alive.
  3. Salve o arquivo e saia do editor.

Configuração para um servidor específico

Se você quiser aplicar configurações diferentes para servidores específicos:

Host meu-servidor-vps
    HostName 123.456.789.10
    User admin
    ServerAliveInterval 30
    ServerAliveCountMax 6

Com esta configuração, você pode se conectar usando ssh meu-servidor-vps e as configurações específicas serão aplicadas.

Configuração temporária via linha de comando

Se você precisar de uma solução rápida sem modificar arquivos de configuração, pode usar opções de linha de comando:

ssh -o ServerAliveInterval=60 -o ServerAliveCountMax=3 usuario@servidor

Soluções para timeouts durante transferências de arquivos

Transferências de arquivos grandes via SSH (usando SCP ou SFTP) são particularmente suscetíveis a timeouts. Aqui estão algumas soluções específicas para esse problema:

Usando o rsync com opção de retomada

O rsync é uma ferramenta poderosa que permite retomar transferências interrompidas:

rsync -avz --partial --progress --timeout=300 /caminho/local/arquivo usuario@servidor:/caminho/destino/

Opções importantes:

  • --partial: Mantém arquivos parcialmente transferidos, permitindo retomar a transferência.
  • --progress: Mostra o progresso da transferência.
  • --timeout=300: Define um timeout de 300 segundos para operações de I/O.

Dividindo arquivos grandes

Para arquivos extremamente grandes, considere dividi-los antes da transferência:

split -b 1G arquivo_grande arquivo_parte_

Isso dividirá o arquivo em partes de 1GB cada. Após a transferência, você pode reuni-las com:

cat arquivo_parte_* > arquivo_grande

Usando o screen ou tmux para sessões persistentes

Ferramentas como screen ou tmux permitem que você mantenha sessões de terminal mesmo se sua conexão SSH cair:

sudo apt install screen
screen
# Inicie sua transferência de arquivo aqui
# Para desanexar: Ctrl+A, D
# Para reanexar: screen -r

Problemas comuns e como resolver

Sintoma: A conexão SSH cai exatamente após X minutos

Causa: Provavelmente há um firewall ou NAT no caminho que está configurado para descartar conexões inativas após esse período específico.
Solução: Configure valores mais baixos para ServerAliveInterval/ClientAliveInterval (por exemplo, 30 segundos) para garantir que os pacotes de keep-alive sejam enviados antes do timeout do firewall.

Sintoma: Mensagem "Write failed: Broken pipe" ao tentar usar SSH após inatividade

Causa: A conexão foi encerrada pelo servidor ou por um dispositivo intermediário, mas o cliente SSH não detectou isso imediatamente.
Solução: Além de configurar os parâmetros de keep-alive, verifique se há problemas de rede intermitentes usando ferramentas como mtr ou traceroute para identificar pontos problemáticos na rota de rede.

Sintoma: As configurações de keep-alive não parecem funcionar

Causa: Pode haver configurações conflitantes em outros arquivos de configuração ou o serviço SSH não foi reiniciado corretamente.
Solução: Verifique se não há configurações contraditórias em /etc/ssh/sshd_config.d/ ou em arquivos incluídos. Reinicie completamente o serviço SSH com sudo systemctl restart sshd e verifique seu status com sudo systemctl status sshd.

Sintoma: Timeouts ocorrem apenas em redes específicas

Causa: Algumas redes, especialmente redes móveis ou públicas, têm políticas agressivas de timeout para economizar recursos.
Solução: Use valores ainda mais baixos para ServerAliveInterval (15-30 segundos) quando estiver nessas redes. Considere também usar uma VPN, que pode fornecer uma conexão mais estável.

Sintoma: Timeouts durante operações de CPU intensivas no servidor

Causa: Quando o servidor está sob carga extrema, pode não responder aos pacotes de keep-alive dentro do tempo esperado.
Solução: Aumente o valor de ServerAliveCountMax/ClientAliveCountMax para tolerar mais pacotes perdidos, e considere otimizar o desempenho do servidor para reduzir a carga de CPU.

Perguntas frequentes sobre timeout no SSH

Por que minha conexão SSH cai após alguns minutos de inatividade?

Sua conexão SSH provavelmente está caindo devido à configuração de timeout no servidor ou no cliente SSH. Para resolver, você pode ajustar o parâmetro ClientAliveInterval no arquivo /etc/ssh/sshd_config do servidor ou configurar o KeepAlive no seu cliente SSH.

Como aumentar o tempo limite de inatividade no SSH?

Para aumentar o tempo limite de inatividade no SSH, edite o arquivo /etc/ssh/sshd_config e adicione ou modifique as linhas ClientAliveInterval e ClientAliveCountMax. Por exemplo, ClientAliveInterval 300 e ClientAliveCountMax 3 permitirão 15 minutos de inatividade antes de desconectar.

É possível manter a conexão SSH sempre ativa?

Sim, é possível manter a conexão SSH praticamente sempre ativa configurando o KeepAlive tanto no cliente quanto no servidor. No cliente, adicione 'ServerAliveInterval 60' ao arquivo ~/.ssh/config, e no servidor, configure 'ClientAliveInterval' com um valor baixo como 60 segundos no arquivo /etc/ssh/sshd_config.

O que fazer quando o SSH apresenta timeout durante a transferência de arquivos grandes?

Quando o SSH apresenta timeout durante transferências grandes, aumente o valor de TCPKeepAlive e ClientAliveInterval no servidor. Também considere usar ferramentas como rsync com a opção --partial para permitir a retomada de transferências interrompidas ou dividir os arquivos em partes menores.

Como diagnosticar a causa de timeouts frequentes no SSH?

Para diagnosticar timeouts frequentes no SSH, verifique os logs do sistema com 'journalctl -u sshd' ou '/var/log/auth.log', teste a latência de rede com 'ping', verifique firewalls intermediários e analise a carga do servidor. Também é útil tentar conexões com o modo verbose do SSH usando 'ssh -vvv usuario@servidor'.

Otimizando a segurança sem comprometer a estabilidade

Ao configurar parâmetros para evitar timeouts, é importante não comprometer a segurança do seu servidor. Aqui estão algumas práticas recomendadas:

  • Não desative completamente os timeouts (definindo valores muito altos), pois isso pode deixar conexões zumbis consumindo recursos do servidor.
  • Use autenticação por chave SSH em vez de senhas para maior segurança.
  • Considere implementar o fail2ban para proteger contra tentativas de força bruta.
  • Limite o acesso SSH a endereços IP específicos usando regras de firewall quando possível.
  • Mantenha seu servidor SSH atualizado para corrigir vulnerabilidades de segurança.

Para implementar autenticação por chave SSH, você pode seguir estes passos:

  1. Gere um par de chaves SSH em sua máquina local (se ainda não tiver):

    ssh-keygen -t ed25519 -C "[email protected]"
  2. Copie a chave pública para o servidor:

    ssh-copy-id usuario@servidor
  3. Opcionalmente, desative a autenticação por senha editando /etc/ssh/sshd_config:

    PasswordAuthentication no
  4. Reinicie o serviço SSH:

    sudo systemctl restart sshd

Você pode encontrar mais informações sobre como acessar servidores VPS Linux da AviraHost em nosso guia detalhado.

Conclusão

  • Os problemas de timeout no SSH podem ser resolvidos ajustando configurações tanto no servidor quanto no cliente, principalmente através dos parâmetros ClientAliveInterval, ClientAliveCountMax, ServerAliveInterval e ServerAliveCountMax.
  • Para transferências de arquivos grandes, ferramentas como rsync com a opção --partial ou o uso de screen/tmux podem evitar a frustração de ter que reiniciar transferências interrompidas.
  • Ao implementar soluções para timeouts, mantenha um equilíbrio entre conveniência e segurança, utilizando autenticação por chave SSH e mantendo seu servidor atualizado.

Precisa de ajuda com seu servidor VPS Linux?

Na AviraHost, oferecemos servidores VPS Linux otimizados com suporte técnico especializado para ajudar você a configurar e manter seu ambiente sem problemas de timeout ou outras questões de conectividade.

Conheça nossos planos de Servidor VPS

  • 0 Usuários acharam útil
  • ssh, timeout, vps, linux, segurança, conexão-remota, AviraHost
Esta resposta lhe foi útil?

Artigos Relacionados

Guia Completo: Como escolher o melhor plano de hospedagem para o seu site

Escolher o plano de hospedagem ideal para o seu site é fundamental para garantir seu bom...

Lista Prática: 5 Vantagens de ter SSL gratuito no seu site

Ter um certificado SSL no seu site não é apenas uma questão de segurança, mas também uma...

Comparativo: Hospedagem de sites vs. VPS: qual é a melhor opção?

Quando se trata de escolher entre hospedagem compartilhada ou VPS, as opções variam de acordo...

Dicas de Otimização de Servidores Linux

Dicas de Otimização de Servidores Linux Servidores Linux são amplamente utilizados por sua...

Como Implementar Soluções Eficientes para Melhorar a Gestão de Serviços Online

Como Implementar Soluções Eficientes para Melhorar a Gestão de Serviços Online...