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:
# 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"sshd_config endurecido para produção
Configuração SSH que elimina os vetores de ataque mais comuns:
# /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 sshdSSH config local (~/.ssh/config)
Simplifique a conexão com múltiplas VPS no seu computador:
# ~/.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:
# Ú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_keysTúnel SSH para serviços internos
Acesse serviços expostos apenas no loopback via túnel SSH seguro:
# 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
Conteúdos relacionados