SSH seguro na VPS: configuração completa

    SSH é o principal ponto de entrada em uma VPS — e o principal alvo de ataques de força bruta. Um servidor exposto na internet recebe centenas de tentativas de login por hora na porta 22. Com as configurações corretas, você elimina praticamente toda ameaça: chave pública obrigatória, root bloqueado e fail2ban cobrindo o restante.

    Gerar par de chaves SSH (no seu computador)

    Chaves Ed25519 são mais seguras e menores que RSA. Gere no seu computador, nunca na VPS:

    bash
    # Gerar chave Ed25519 (recomendada)
    ssh-keygen -t ed25519 -C "deploy@minha-vps" -f ~/.ssh/id_ed25519_runstack
    
    # Ver a chave pública (vai para a VPS)
    cat ~/.ssh/id_ed25519_runstack.pub
    
    # Copiar para a VPS
    ssh-copy-id -i ~/.ssh/id_ed25519_runstack.pub deploy@IP_DA_VPS
    
    # Ou manualmente:
    cat ~/.ssh/id_ed25519_runstack.pub | ssh deploy@IP_DA_VPS \
      "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys"
    Dica
    Nunca compartilhe a chave privada (~/.ssh/id_ed25519_runstack). Apenas a .pub vai para o servidor. Use passphrase ao criar — protege contra roubo do arquivo de chave privada.

    sshd_config endurecido para produção

    Configuração SSH que elimina os vetores de ataque mais comuns:

    bash
    # /etc/ssh/sshd_config
    
    PermitRootLogin no
    PasswordAuthentication no
    PubkeyAuthentication yes
    AuthorizedKeysFile .ssh/authorized_keys
    MaxAuthTries 3
    MaxSessions 3
    LoginGraceTime 20
    AllowUsers deploy
    ClientAliveInterval 600
    ClientAliveCountMax 2
    X11Forwarding no
    AllowAgentForwarding no
    AllowTcpForwarding no
    PrintMotd no
    
    # Algoritmos seguros
    KexAlgorithms curve25519-sha256,diffie-hellman-group14-sha256
    Ciphers chacha20-poly1305@openssh.com,aes256-gcm@openssh.com
    
    # Verificar sintaxe e recarregar
    # sshd -t && systemctl reload sshd
    Atenção
    PasswordAuthentication no bloqueia login por senha. Certifique-se de que sua chave SSH está no authorized_keys e que consegue logar com ela ANTES de aplicar.

    SSH config local (~/.ssh/config)

    Simplifique a conexão com múltiplas VPS no seu computador:

    bash
    # ~/.ssh/config
    
    Host runstack-prod
        HostName 203.0.113.10
        User deploy
        IdentityFile ~/.ssh/id_ed25519_runstack
        Port 22
        ServerAliveInterval 60
    
    Host runstack-staging
        HostName 203.0.113.20
        User deploy
        IdentityFile ~/.ssh/id_ed25519_runstack
    
    Host *
        AddKeysToAgent yes
        IdentitiesOnly yes
    
    # Uso:
    # ssh runstack-prod
    # scp arquivo runstack-prod:/opt/app/

    Auditar acessos SSH

    Monitore quem acessou e tentativas de login:

    bash
    # Últimos logins
    last -n 20
    
    # Tentativas com falha
    lastb | head -20
    
    # IPs com mais tentativas de brute force (últimas 24h)
    journalctl -u ssh --since "24 hours ago" | \
      grep "Invalid user\|Failed password" | \
      grep -oE '[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+' | \
      sort | uniq -c | sort -rn | head -10
    
    # Ver chaves autorizadas (remover as desconhecidas)
    cat ~/.ssh/authorized_keys

    Túnel SSH para serviços internos

    Acesse serviços expostos apenas no loopback via túnel SSH seguro:

    bash
    # Acessar PostgreSQL na VPS sem expor a porta 5432 publicamente
    ssh -L 5432:localhost:5432 deploy@IP_DA_VPS
    # psql -h localhost -p 5432 -U user db
    
    # Túnel para painel web interno (ex: Grafana na porta 3000)
    ssh -L 3000:localhost:3000 deploy@IP_DA_VPS
    # Abrir: http://localhost:3000
    
    # Túnel persistente em background
    ssh -fNL 3000:localhost:3000 deploy@IP_DA_VPS
    
    # Via jump host (bastion)
    ssh -J deploy@bastion.dominio.com deploy@192.168.1.10

    $ runstack deploy --plan starter

    Não quer configurar manualmente?

    Não quer configurar manualmente? Implante o VPS em menos de 3 minutos com a Runstack. Infraestrutura da OPEN DATACENTER, com servidores no Brasil.

    Perguntas frequentes