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:
-
Requisição de Serviço: O cliente envia uma mensagem
SSH_MSG_SERVICE_REQUESTpara o serviçossh-userauth. -
Lista de Métodos: O servidor responde com os métodos que ele aceita (ex:
publickey, password, keyboard-interactive). -
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.
-
O cliente envia a assinatura de um “nonce” (número aleatório) gerado pelo servidor.
-
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 okeyboard-interactivelogo em seguida. -
Tentativas Limitadas: O parâmetro
MaxAuthTriesno arquivosshd_configdefine 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.