Como configurar 2FA no acesso SSH
A autenticação por chave já é muito segura. Mas, se a chave privada for roubada de um notebook, o invasor terá acesso ao servidor. Com 2FA (autenticação em dois fatores), ele também precisaria do código temporário do seu celular.
Neste tutorial, vamos exigir chave SSH + código TOTP (Google Authenticator, Authy, Aegis, 1Password etc.).
Mantenha uma sessão SSH aberta durante toda a configuração e teste em outra janela antes de desconectar. Tenha acesso ao console do painel do provedor como plano B.
1. Instale o módulo PAM
# Debian/Ubuntu
sudo apt install libpam-google-authenticator -y
# AlmaLinux/Rocky (EPEL)
sudo dnf install epel-release -y
sudo dnf install google-authenticator qrencode -y
2. Gere o segredo para o seu usuário
Execute como o usuário que acessa o servidor (não como root):
google-authenticator
Respostas recomendadas:
- Tokens baseados em tempo? y
- Escaneie o QR Code no app autenticador;
- Guarde os códigos de emergência em local seguro;
- Atualizar o arquivo
~/.google_authenticator? y - Impedir reutilização do mesmo token? y
- Aumentar a janela de tempo? n (a menos que tenha problemas de relógio);
- Limitar tentativas? y
3. Configure o PAM do SSH
Edite /etc/pam.d/sshd e adicione ao final:
auth required pam_google_authenticator.so nullok
O nullok permite que usuários ainda sem 2FA configurado continuem entrando. Remova-o depois que todos configurarem.
Como vamos usar chave + código (e não senha + código), comente a linha que pede a senha do sistema no mesmo arquivo:
# @include common-auth
No AlmaLinux/Rocky, o equivalente é a linha
auth substack password-auth. Comente-a apenas se não usar senha no SSH.
4. Configure o SSH
Crie /etc/ssh/sshd_config.d/20-2fa.conf:
KbdInteractiveAuthentication yes
UsePAM yes
AuthenticationMethods publickey,keyboard-interactive
Em versões antigas do OpenSSH, a opção se chama
ChallengeResponseAuthentication yes.
Garanta que não haja outro arquivo em sshd_config.d/ definindo KbdInteractiveAuthentication no antes do seu. Valide e reinicie:
sudo sshd -t
sudo systemctl restart ssh # ou sshd
5. Teste em uma nova janela
ssh usuario@SEU_IP
O fluxo esperado:
- A chave SSH é verificada;
- É solicitado o Verification code;
- Você digita o código do app e entra.
Sincronização de horário
Códigos TOTP dependem do relógio. Garanta que o servidor está sincronizado:
timedatectl
sudo timedatectl set-ntp true
Dicas
- Guarde os códigos de emergência fora do celular;
- Para automações (deploys, backups), use um usuário separado, restrito a comandos específicos, em vez de desativar o 2FA;
- Combine com Fail2ban, que também registra falhas de 2FA.
Conclusão
Chave SSH + 2FA cria uma barreira robusta mesmo que um dispositivo seja comprometido.Aplique essa proteção no seu VPS-NVME-BR da VittHost — e use o cupom SP-VITT20 para ganhar 20% de desconto na primeira fatura enquanto a promoção estiver ativa.