SSH OTP

Adicione códigos únicos baseados em tempo ao login SSH usando Linux PAM e módulo PAM do Google Authenticator.

Antes de executar

Este exemplo do Ubuntu instala um módulo PAM adicional e altera a autenticação do servidor. Mantenha aberta uma sessão administrativa existente e um console independente ou acesso de recuperação. Configure e teste cada conta antes da aplicação; armazene os códigos secretos e de emergência OTP com segurança e nunca os publique. Sincronize o relógio do servidor. Confirme se o seu cliente SSH oferece suporte a prompts interativos de teclado e se as contas de automação e recuperação permanecem utilizáveis. A pilha PAM de amostra mantém autenticação comum, que pode exigir a senha do sistema, bem como o OTP: chave pública mais teclado interativo não garante, por si só, exatamente dois prompts ou exatamente dois fatores. Arquivos PAM, políticas e nomes de serviços variam de acordo com a distribuição; não aplique este exemplo inalterado aos servidores macOS ou Windows.

Após aplicar as alterações, confirme em uma nova sessão SSH que o login e o funcionamento esperado estão corretos. Mantenha a sessão atual aberta até a verificação ser concluída, para poder restaurar a configuração se necessário.

Aplicativos autenticadores

Use um aplicativo TOTP no celular para escanear o QR code de cadastro ou inserir o segredo manualmente. Proteja o QR code e o segredo e guarde os códigos de recuperação em segurança. O aplicativo é separado do módulo PAM do servidor.

O 2FAS oferece backups opcionais; a sincronização entre dispositivos é um recurso Premium. A disponibilidade depende da plataforma e do plano.

Exemplos

Instale o módulo PAM no Ubuntu. O módulo é separado do OpenSSH e requer privilégios de administrador.

sudo apt update
sudo apt install libpam-google-authenticator

Execute a ferramenta de inscrição para cada conta que usará OTP. Siga as instruções interativas, adicione a conta a um aplicativo autenticador e armazene os códigos de emergência com segurança. Não compartilhe ou registre o segredo exibido.

google-authenticator

No arquivo de serviço SSH PAM existente (normalmente /etc/pam.d/sshd), adicione o módulo como uma regra de autenticação, preservando todas as contas, sessões e outras regras existentes. Este fragmento mantém a autenticação comum; sua política PAM também pode solicitar uma senha do sistema. Não adicione nullok quando OTP for necessário.

Abra o arquivo com nano:

sudo nano /etc/pam.d/sshd
@include common-auth
auth required pam_google_authenticator.so

Mescle essas configurações na configuração efetiva do servidor SSH. Isso requer uma chave pública e autenticação interativa com teclado PAM; A ordem de inclusão ou os blocos de correspondência existentes podem alterar o resultado. Não substitua toda a configuração.

Abra o arquivo com nano:

sudo nano /etc/ssh/sshd_config
UsePAM yes
PubkeyAuthentication yes
KbdInteractiveAuthentication yes
PasswordAuthentication no
AuthenticationMethods publickey,keyboard-interactive:pam

Valide a sintaxe e inspecione a política efetiva antes de aplicar o procedimento de recarga do serviço SSH do sistema. Use sshd -T -C com o usuário e endereço relevantes quando as regras de correspondência se aplicarem. Em uma sessão separada, verifique a chave e todos os fatores solicitados antes de fechar a sessão original.

sudo sshd -t && sudo sshd -T && sudo systemctl reload ssh

Opcional: chave pública e OTP

Para exigir chave pública e OTP sem pedir também a senha da conta, ajuste as regras auth do PAM para SSH. Remover common-auth do serviço PAM SSH afeta todas as contas desse serviço e pode ignorar outras políticas. Revise as demais regras auth com o administrador; preserve as regras account e session, a sessão atual e um acesso independente de recuperação.

Este trecho de Ubuntu ilustra as regras auth e não é um arquivo PAM completo. Comente common-auth somente após avaliar o impacto. Não adicione nullok. Outras regras auth ainda podem exigir fatores adicionais.

Abra o arquivo com nano:

sudo nano /etc/pam.d/sshd
# /etc/pam.d/sshd: auth fragment only
# @include common-auth
auth required pam_google_authenticator.so

Depois de incorporar a configuração SSH acima, confira os valores efetivos. As chaves exibidas estão em minúsculas. A ordem de Include e os blocos Match podem alterar o resultado; para Match, use sshd -T -C com os dados da conexão.

sudo sshd -T | grep -E '^(usepam|pubkeyauthentication|kbdinteractiveauthentication|passwordauthentication|authenticationmethods) '

Valide e recarregue conforme acima. Em outra sessão cliente, conecte-se com a conta cadastrada e a chave privada e informe o código. Verifique que o acesso falha sem a chave ou o código exigidos antes de fechar a sessão original.

ssh -i ~/.ssh/id_ed25519 alice@server.example.com

O Secure Pipes aceita solicitações SSH keyboard-interactive para informar o código pedido pelo servidor. Esse OTP é diferente do usado para desbloquear o aplicativo. O segredo OTP compartilhado fica no servidor e no autenticador; o Secure Pipes não precisa armazená-lo para esse acesso.

Referências oficiais

Revisado em 27 de outubro de 2026