Configurar chave SSH na VPS

Autenticação por chave SSH é mais segura que senha por dois motivos: a chave privada nunca trafega pela rede (só a pública fica no servidor) e é computacionalmente impossível adivinhar por força bruta. Configurar chaves SSH é o primeiro passo de segurança em qualquer VPS nova, e elimina a inconveniência de digitar senha a cada acesso.

Gerar o par de chaves no seu computador

O par de chaves é gerado localmente, a chave privada fica no seu computador, a pública vai para a VPS. Nunca compartilhe a chave privada:

bash
# Gerar chave Ed25519 (mais moderna e segura)
ssh-keygen -t ed25519 -C "sua@email.com"
# Quando perguntar onde salvar: pressione Enter (padrão ~/.ssh/id_ed25519)
# Defina uma passphrase (recomendado) ou deixe vazia

# Alternativa: RSA 4096 (maior compatibilidade com sistemas antigos)
ssh-keygen -t rsa -b 4096 -C "sua@email.com"

# Ver as chaves geradas
ls ~/.ssh/
# id_ed25519       (chave PRIVADA — nunca compartilhe)
# id_ed25519.pub   (chave PÚBLICA — vai para a VPS)

# Ver o conteúdo da chave pública
cat ~/.ssh/id_ed25519.pub

Copiar a chave pública para a VPS

Com a chave gerada, copie a chave pública para o servidor. O ssh-copy-id automatiza isso com segurança:

bash
# Método 1: ssh-copy-id (mais simples — requer senha por enquanto)
ssh-copy-id -i ~/.ssh/id_ed25519.pub usuario@IP_DA_VPS

# Método 2: manual (se ssh-copy-id não estiver disponível)
# Na VPS, como root ou o usuário de destino:
mkdir -p ~/.ssh
chmod 700 ~/.ssh
echo "CONTEUDO_DA_CHAVE_PUBLICA" >> ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys

# Método 3: via painel Runstack
# Settings → SSH Keys → Add Key
# Cole o conteúdo de ~/.ssh/id_ed25519.pub
# A chave será adicionada automaticamente em novas VPS

Testar e configurar o SSH config local

Após copiar a chave, teste o login e configure um alias no arquivo ~/.ssh/config para simplificar o acesso:

bash
# Testar login com chave (não deve pedir senha da VPS)
ssh usuario@IP_DA_VPS

# Configurar alias no ~/.ssh/config (no seu computador local)
cat >> ~/.ssh/config << 'EOF'

Host runstack-prod
    HostName IP_DA_VPS
    User deploy
    IdentityFile ~/.ssh/id_ed25519
    Port 22

Host runstack-dev
    HostName IP_DA_VPS_2
    User deploy
    IdentityFile ~/.ssh/id_ed25519
EOF

# Agora conecte simplesmente com:
ssh runstack-prod

Desabilitar autenticação por senha no servidor

Com a chave funcionando, desabilite a autenticação por senha para bloquear ataques de força bruta:

bash
# Na VPS, editar /etc/ssh/sshd_config
sudo nano /etc/ssh/sshd_config

# Localizar e alterar as linhas:
# PasswordAuthentication no
# PubkeyAuthentication yes
# AuthorizedKeysFile .ssh/authorized_keys
# PermitRootLogin prohibit-password

# Ou fazer via sed:
sudo sed -i 's/^PasswordAuthentication yes/PasswordAuthentication no/' /etc/ssh/sshd_config
sudo sed -i 's/^#PasswordAuthentication yes/PasswordAuthentication no/' /etc/ssh/sshd_config

# Testar a configuração antes de recarregar
sudo sshd -t && echo "Configuração OK"

# Recarregar o SSH (sem derrubar sessões ativas)
sudo systemctl reload sshd

Gerenciar múltiplas chaves e revogar acesso

Para equipes, cada membro tem sua chave pública no authorized_keys. Revogar acesso é simples:

bash
# Ver todas as chaves autorizadas
cat ~/.ssh/authorized_keys

# Cada linha é uma chave: "tipo chave comentario"
# Ex: ssh-ed25519 AAAAC3Nza... joao@empresa.com
#     ssh-ed25519 AAAAC3Nzb... maria@empresa.com

# Revogar acesso: remover a linha da chave do usuário
# Usando grep para encontrar e sed para remover:
sed -i '/joao@empresa.com/d' ~/.ssh/authorized_keys

# Forçar desconexão de sessões ativas do usuário revogado
# (verificar PID com 'who' e matar com 'kill')
who
sudo pkill -u joao   # se o usuário tiver conta no sistema

Não quer configurar manualmente?

Implante o VPS em menos de 5 minutos com a Runstack. Infraestrutura da OPEN Datacenter, com servidores em São Paulo.

Perguntas frequentes

Use o console VNC da Runstack (painel → VPS → Console). Com acesso ao console, edite ~/.ssh/authorized_keys e adicione uma nova chave pública gerada no seu computador. Alternativamente, você pode temporariamente reativar a autenticação por senha no sshd_config via console, entrar com SSH e senha, e configurar a nova chave.

Sim, e é o uso mais comum. A mesma chave pública fica no authorized_keys de cada servidor. A chave privada permanece no seu computador e funciona com todos eles. Para ambientes de alta segurança, considere chaves distintas por ambiente (prod/dev/staging) para limitar o raio de dano se uma chave for comprometida.

ssh-agent é um daemon que guarda a chave privada descriptografada em memória, você digita a passphrase uma vez por sessão. eval $(ssh-agent) para iniciar; ssh-add ~/.ssh/id_ed25519 para adicionar a chave. No macOS com Keychain: ssh-add --apple-use-keychain ~/.ssh/id_ed25519.

Adicione a chave pública da pessoa ao authorized_keys do usuário apropriado (nunca root). Quando quiser revogar: remova a linha do arquivo. Para acesso mais controlado, crie um usuário separado sem sudo: adduser visitante && mkdir -p /home/visitante/.ssh && echo "CHAVE" >> /home/visitante/.ssh/authorized_keys.

Ubuntu 20.04+ e Debian 10+ suportam ed25519. Para sistemas muito antigos (Ubuntu 16.04, CentOS 6), use rsa -b 4096. Para confirmar suporte: ssh -Q key ubuntu@IP_DA_VPS.