O Processo de Autenticação no SSH é a fase crítica que ocorre imediatamente após o estabelecimento do túnel cifrado (Camada de Transporte). O objetivo técnico desta etapa é provar ao servidor que o cliente possui o direito de acessar a conta solicitada. No SSH-2 (especificado pela RFC 4252), a autenticação é flexível e multi-método, permitindo que uma única sessão exija múltiplas provas de identidade antes de liberar o acesso ao shell.


1. Pré-requisitos: O Túnel Seguro

Antes de qualquer dado de autenticação (como uma senha) ser enviado, o cliente e o servidor já completaram a troca de chaves Diffie-Hellman.

  • Confidencialidade: Todas as mensagens de autenticação são enviadas dentro do túnel cifrado simetricamente.

  • Identidade do Servidor: O cliente já validou a Host Key do servidor. O processo de autenticação de usuário só começa se o cliente confiar que o servidor não é um impostor.

2. O Protocolo de Autenticação (ssh-userauth)

O processo segue um modelo de requisição e resposta estruturado:

  1. Requisição de Serviço: O cliente envia uma mensagem SSH_MSG_SERVICE_REQUEST para o serviço ssh-userauth.

  2. Lista de Métodos: O servidor responde com os métodos que ele aceita (ex: publickey, password, keyboard-interactive).

  3. Tentativa de Autenticação: O cliente escolhe um método e envia uma mensagem SSH_MSG_USERAUTH_REQUEST.


3. Métodos Comuns de Autenticação

A. Senha (Password)

O método mais simples, onde o cliente envia a senha em texto claro dentro do túnel cifrado. O servidor valida a senha contra o banco de dados local (ex: /etc/shadow via PAM).

  • Risco: Vulnerável a ataques de força bruta se o servidor estiver exposto à internet sem proteções como Fail2Ban.

B. Chave Pública (Public Key)

O método mais seguro. O cliente prova a posse de uma chave privada sem nunca enviá-la.

  1. O cliente envia a assinatura de um “nonce” (número aleatório) gerado pelo servidor.

  2. O servidor verifica a assinatura usando a chave pública em authorized_keys.

C. Interativo por Teclado (Keyboard-Interactive)

Um método genérico onde o servidor envia prompts de texto ao usuário. É comumente utilizado para implementar a Autenticação de Dois Fatores (2FA/MFA), como códigos do Google Authenticator ou tokens SMS.


4. Ordem e Persistência

O servidor SSH pode ser configurado para exigir uma ordem específica ou múltiplos métodos:

  • MFA Obrigatório: O servidor pode ser configurado para aceitar a publickey, mas ainda assim exigir o keyboard-interactive logo em seguida.

  • Tentativas Limitadas: O parâmetro MaxAuthTries no arquivo sshd_config define quantas vezes o cliente pode falhar antes que o servidor encerre a conexão TCP por segurança.

5. Finalização do Processo

  • Sucesso: O servidor envia uma mensagem SSH_MSG_USERAUTH_SUCCESS. O cliente então solicita a abertura de um canal de sessão (shell).

  • Falha: O servidor envia SSH_MSG_USERAUTH_FAILURE. Ele pode listar quais métodos ainda restam para o cliente tentar. Se o cliente esgotar as tentativas, ocorre o “Permission Denied”.

6. Segurança: O Papel do PAM (Pluggable Authentication Modules)

No Linux, o processo de autenticação do SSH frequentemente delega a decisão final para o PAM. Isso permite que o SSH se integre a diretórios centrais como LDAP, Active Directory ou utilize módulos complexos de conformidade de senha sem precisar alterar o código-fonte do servidor SSH.