A Autenticação Multifator (MFA) no SSH é uma camada de segurança avançada que exige que o usuário apresente duas ou mais provas independentes de identidade antes de obter acesso ao servidor. Em um ambiente de alta segurança, depender de apenas um fator (como uma senha que pode ser roubada ou uma chave privada que pode ser copiada de um laptop perdido) é considerado um risco.

O MFA combina diferentes categorias de evidências, geralmente classificadas como:

  • Algo que você sabe: Uma senha ou frase secreta.

  • Algo que você possui: Uma chave física (Yubikey), um smartphone (Google Authenticator) ou uma chave privada SSH.

  • Algo que você é: Biometria (impressão digital ou reconhecimento facial) usada para desbloquear o dispositivo que contém a chave.


1. Funcionamento Técnico no SSH

O protocolo SSH-2 suporta nativamente a exigência de múltiplos métodos de autenticação em sequência. Quando o MFA está ativo, o servidor não libera o shell após o primeiro sucesso; ele envia um novo desafio.

A implementação mais comum utiliza o método keyboard-interactive, que permite ao servidor enviar prompts de texto genéricos para o cliente, como: "Digite o código de 6 dígitos do seu autenticador:".


2. Combinações Comuns de MFA

Existem várias formas de estruturar o MFA em um servidor SSH:

  • Chave Pública + Senha: O usuário deve possuir a chave privada correta e, em seguida, digitar a senha do sistema. Isso protege contra o roubo da chave física e contra ataques de força bruta à senha.

  • Chave Pública + TOTP (Google Authenticator/Authy): Após a validação da chave, o servidor solicita um código temporário (Time-based One-Time Password) gerado por um aplicativo no celular do usuário.

  • Chave Pública + FIDO2/U2F: O padrão mais moderno, onde o SSH se comunica diretamente com uma chave de segurança física (como uma YubiKey). O usuário deve tocar fisicamente no dispositivo para autorizar a conexão.


3. Implementação via PAM e Google Authenticator

No Linux, a forma mais popular de adicionar o segundo fator é através do módulo libpam-google-authenticator.

  1. O administrador instala o módulo no servidor.

  2. O usuário executa o comando google-authenticator para gerar um QR Code e chaves de recuperação.

  3. O arquivo /etc/pam.d/sshd é configurado para exigir o módulo.

  4. O sshd_config é ajustado para permitir a autenticação multifator.


4. Configuração no sshd_config

Para forçar o uso de dois fatores, utiliza-se a diretiva AuthenticationMethods. Por exemplo, para exigir uma Chave Pública E um código interativo:

Bash

# Exige que o usuário passe pela chave pública E pelo segundo fator (PAM)
AuthenticationMethods publickey,keyboard-interactive

5. Benefícios Críticos

  • Proteção contra Credenciais Vazadas: Mesmo que um atacante obtenha sua senha e sua chave privada, ele ainda precisaria do seu dispositivo físico (celular ou token) para entrar.

  • Conformidade (Compliance): Muitas normas de segurança (como PCI-DSS e SOC2) exigem MFA para qualquer acesso administrativo a servidores que manipulem dados sensíveis.

  • Mitigação de Phishing: Como os códigos TOTP expiram em 30 segundos e as chaves FIDO2 são atreladas ao domínio/host, é extremamente difícil para um invasor interceptar e usar esses fatores em tempo real.