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