Diagnosticando e Resolvendo Falhas de Autenticação SSH
Corrija falhas de autenticação SSH com logs detalhados do cliente, logs do servidor, verificações de permissão, validação de chaves e configurações do sshd.
Diagnosticando e Resolvendo Falhas de Autenticação SSH
O Secure Shell (SSH) é a base da administração remota segura, permitindo acesso criptografado a servidores e dispositivos de rede. No entanto, encontrar falhas de autenticação é uma experiência comum e muitas vezes frustrante para administradores de sistemas e desenvolvedores. Esses problemas podem ter diversas causas, desde simples erros de digitação até problemas complexos de permissão ou configurações incorretas.
Este artigo serve como um guia abrangente para diagnosticar e resolver falhas de autenticação SSH de forma eficaz. Vamos nos aprofundar em métodos sistemáticos de solução de problemas, enfatizando o papel crítico da saída detalhada do lado do cliente e da análise de logs do lado do servidor. Ao entender como interpretar essas pistas de diagnóstico, você estará preparado para identificar a causa raiz da maioria dos problemas de autenticação e restaurar seu acesso remoto seguro.
Entendendo os Métodos de Autenticação SSH
Antes de mergulhar na solução de problemas, é essencial entender os principais métodos de autenticação que o SSH utiliza:
- Autenticação por Senha: O usuário fornece uma senha, que o servidor verifica em seu banco de dados de usuários ou em um serviço de autenticação externo (como PAM).
- Autenticação por Chave Pública: Este método mais seguro usa um par de chaves criptográficas: uma chave privada armazenada no cliente e uma chave pública correspondente armazenada no servidor. Ao autenticar, o cliente usa sua chave privada para provar sua identidade sem nunca enviar a chave privada pela rede.
Falhas de autenticação podem ocorrer com qualquer um dos métodos, mas as etapas de solução de problemas geralmente diferem.
Verificações Iniciais e Armadilhas Comuns
Antes de mergulhar em logs detalhados, é prudente realizar algumas verificações básicas, pois muitos problemas são frequentemente descuidos simples:
- Nome de Usuário e Hostname Corretos: Verifique novamente se você está usando o nome de usuário correto e o hostname ou endereço IP exato do servidor de destino.
- Conectividade de Rede: Você consegue alcançar o servidor? Use
nc -vz host 22oussh -vvvpara testar a acessibilidade SSH. Opingpode ajudar, mas muitos servidores bloqueiam ICMP mesmo quando o SSH está funcionando.ping example.com - Status do Serviço SSH: O servidor SSH (
sshd) está realmente em execução na máquina de destino? Se você tiver acesso ao console, verifique seu status.sudo systemctl status sshd # Para sistemas baseados em systemd (maioria dos Linux modernos) sudo service sshd status # Para sistemas init mais antigos - Porta SSH: O daemon SSH está ouvindo na porta padrão (22) ou em uma porta personalizada? Se for uma porta personalizada, você precisará especificá-la com
-p. - Regras de Firewall: Existem firewalls (do lado do cliente ou do servidor) bloqueando a porta 22 (ou sua porta SSH personalizada)? Verifique firewalls do servidor como
ufw,firewalldou grupos de segurança da AWS.sudo ufw status sudo firewall-cmd --list-all
Diagnóstico do Lado do Cliente: Aproveitando o Modo Detalhado
O cliente SSH oferece modos detalhados (-v, -vv, -vvv) que fornecem saída de depuração detalhada sobre o processo de conexão e tentativas de autenticação. Essa saída é inestimável para entender por que o cliente acha que a autenticação está falhando.
Usando Flags Detalhadas
-v: Saída detalhada.-vv: Saída mais detalhada.-vvv: Saída ainda mais detalhada (geralmente a mais útil para problemas de autenticação).
Comando de Exemplo:
ssh -vvv usuario@ip_do_servidor
Interpretando a Saída Detalhada
Ao executar ssh no modo detalhado, procure por linhas-chave que indicam onde o processo de autenticação está falhando:
debug1: Authentications that can continue:: Esta linha informa quais métodos de autenticação o servidor está disposto a aceitar. Se o método desejado (por exemplo,publickey) não estiver listado, a configuração do servidor está impedindo.debug1: Authentications that can continue: publickey,gssapi-keyex,gssapi-with-mic,passworddebug1: Offering public key:: Isso indica que seu cliente está tentando usar uma chave pública específica para autenticação. Se você espera autenticação por chave pública, mas não vê isso, seu cliente não está encontrando ou oferecendo a chave.debug1: Offering public key: /home/user/.ssh/id_rsa RSA SHA256:...debug3: send_pubkey_test: ... trying private key: /home/user/.ssh/id_rsa: Isso confirma que o cliente está tentando usar uma chave privada específica.debug1: Server accepts key: ...: Isso indicaria autenticação bem-sucedida por chave pública da perspectiva do cliente. Se você não vir isso, a chave provavelmente foi rejeitada pelo servidor.debug1: No more authentication methods to try.: Isso geralmente aparece antes de um erroPermission deniede significa que o cliente esgotou todos os métodos de autenticação disponíveis sem sucesso.debug1: Permission denied (publickey,password).: Este é o erro final do lado do cliente, resumindo a rejeição de todas as tentativas pelo servidor.
Dica: Preste muita atenção à ordem dos métodos de autenticação oferecidos e aceitos. Se
publickeyfor oferecido, mas imediatamente seguido por um prompt de senha, geralmente significa que o servidor rejeitou a chave pública.
Diagnóstico do Lado do Servidor: Examinando Logs do Servidor SSH
Enquanto a saída detalhada do lado do cliente mostra o que o cliente está tentando fazer, os logs do servidor fornecem informações definitivas sobre por que o servidor rejeitou a tentativa de autenticação. Esta é frequentemente a etapa mais crítica na análise de causa raiz.
Localizando Logs do Servidor SSH
A localização dos logs do servidor SSH varia de acordo com o sistema operacional:
- Debian/Ubuntu e derivados:
/var/log/auth.log - RHEL/CentOS/Fedora e derivados:
/var/log/secure - Sistemas baseados em systemd (maioria dos Linux modernos): Você também pode usar
journalctl.
Visualizando e Filtrando Logs do Servidor
Use ferramentas como tail ou journalctl para monitorar logs em tempo real ou filtrar entradas específicas do SSH.
Comandos de Exemplo:
# Para Debian/Ubuntu
sudo tail -f /var/log/auth.log | grep sshd
# Para RHEL/CentOS
sudo tail -f /var/log/secure | grep sshd
# Para sistemas baseados em systemd (maneira mais robusta de visualizar logs atuais)
sudo journalctl -u sshd -f
# Para visualizar todos os logs do sshd desde o início (útil se a falha ocorreu antes)
sudo journalctl -u sshd
Entradas Comuns de Log do Servidor e Seus Significados
Procure por mensagens relacionadas a sshd quando você tentar se conectar. Aqui estão algumas entradas comuns que indicam falhas de autenticação:
Failed password for user from IP port ssh2: Indica que uma tentativa de autenticação por senha falhou. Isso pode ser devido a uma senha incorreta ou se o usuário não tem permissão para fazer login via senha.Authentication refused: bad ownership or modes for directory /home/user/.ssh: Este é um erro muito comum de autenticação por chave pública. O diretório.sshno servidor tem permissões incorretas.- Solução:
chmod 700 /home/user/.ssh
- Solução:
Authentication refused: bad ownership or modes for file /home/user/.ssh/authorized_keys: Outro erro comum de chave pública, indicando que o arquivoauthorized_keystem permissões incorretas.- Solução:
chmod 600 /home/user/.ssh/authorized_keys
- Solução:
sshd[PID]: error: Permissions 0777 for '/home/user/.ssh/authorized_keys' are too open.: Declara explicitamente o problema com modos de arquivo excessivamente permissivos. O SSH é muito rigoroso com permissões por razões de segurança.User username from IP not allowed because not listed in AllowUsers: O usuário não tem permissão para fazer login via SSH de acordo com a diretivaAllowUsersem/etc/ssh/sshd_config.User username from IP not allowed because listed in DenyUsers: O usuário tem explicitamente negado o acesso SSH porDenyUsers.input_userauth_request: invalid user username: O nome de usuário fornecido não existe no servidor.Failed publickey for userou chaves oferecidas repetidamente seguidas por senha: a chave pública apresentada pelo cliente não correspondeu a uma chave aceita para aquele usuário, ou o servidor recusou a chave devido a permissões ou política.Maximum authentication attempts exceeded for user from IP: O cliente tentou muitos métodos de autenticação ou enviou muitas credenciais incorretas. Controlado porMaxAuthTriesemsshd_config.Connection closed by authenticating user IP port 22 [preauth]: Isso pode ocorrer se nenhum método de autenticação aceitável foi encontrado, ou se o cliente fecha abruptamente a conexão após uma falha.
Cenários Comuns de Falha de Autenticação e Soluções
Vamos categorizar falhas comuns e seus remédios específicos.
1. Falhas de Autenticação por Senha
- Senha Incorreta: O problema mais direto. Verifique sua senha novamente. Esteja ciente dos layouts de teclado, Caps Lock ou Num Lock.
- Usuário Não Permitido: O arquivo
sshd_config(/etc/ssh/sshd_config) pode restringir o login para certos usuários.PermitRootLogin no: Impede o login root (altamente recomendado para segurança).AllowUsers usuario1 usuario2: Apenas usuários especificados podem fazer login.DenyUsers usuario: Usuários especificados não podem fazer login.AllowGroups nome_do_grupo: Apenas usuários em grupos especificados podem fazer login.- Solução: Ajuste as diretivas do
sshd_confige reinicie osshd.
- Problemas com PAM: Se o servidor usa Pluggable Authentication Modules (PAM), problemas com a configuração do PAM podem impedir a autenticação por senha. Verifique
/var/log/auth.logpara erros específicos do PAM. Isso é menos comum para configurações SSH básicas.
2. Falhas de Autenticação por Chave Pública
A autenticação por chave pública é geralmente mais segura, mas propensa a mais erros relacionados à configuração.
- Permissões Incorretas de Arquivo/Diretório (Lado do Servidor): Esta é de longe a causa mais comum. O SSH exige permissões estritas para
~/.sshe~/.ssh/authorized_keyspor segurança.~: O diretório home do usuário não deve ser gravável por todos (chmod 755 ~geralmente é seguro).~/.ssh: Deve ser700(rwx apenas para o proprietário).chmod 700 ~/.ssh~/.ssh/authorized_keys: Deve ser600(rw apenas para o proprietário).chmod 600 ~/.ssh/authorized_keys- O proprietário desses arquivos e diretórios deve ser o usuário que está tentando fazer login.
sudo chown -R usuario:usuario ~/.ssh
- Conteúdo Incorreto de
authorized_keys: A chave pública em~/.ssh/authorized_keyspode estar corrompida, ter caracteres extras ou estar em um formato incorreto. Cada chave deve estar em uma única linha. Uma maneira rápida de garantir o formato adequado é usarssh-copy-iddo cliente.
Para verificar a impressão digital da sua chave pública no lado do cliente, use:ssh-copy-id -i ~/.ssh/id_rsa.pub usuario@ip_do_servidorssh-keygen -l -f ~/.ssh/id_rsa.pub - Cliente Não Oferecendo Chave: A chave privada pode não estar no local padrão (
~/.ssh/id_rsa), não carregada nossh-agent, ou você não a especificou com-i.- Solução: Certifique-se de que sua chave privada seja
id_rsa(ouid_ed25519, etc.) em~/.sshe tenha permissões600. Se não, especifique-a:ssh -i /caminho/para/sua/chave_privada usuario@ip_do_servidor - Se estiver usando
ssh-agent, certifique-se de que sua chave foi adicionada:eval "$(ssh-agent -s)" ssh-add ~/.ssh/sua_chave_privada
- Solução: Certifique-se de que sua chave privada seja
sshd_configDesabilitando Autenticação por Chave Pública: O daemon SSH do servidor pode estar configurado para desabilitar a autenticação por chave pública.- Verifique
PubkeyAuthentication yesem/etc/ssh/sshd_config. - Verifique
AuthorizedKeysFile .ssh/authorized_keyspara garantir que aponte para o arquivo correto. O padrão geralmente é suficiente. - Solução: Defina
PubkeyAuthentication yese reinicie osshd.
- Verifique
- Interferência do SELinux/AppArmor: Em sistemas com SELinux ou AppArmor, esses módulos de segurança podem às vezes bloquear o SSH de acessar diretórios home do usuário ou arquivos
.ssh, mesmo que as permissões de arquivo estejam corretas. Verifique logs de auditoria (/var/log/audit/audit.logousudo ausearch -m AVC -ts recent) para pistas. Este é um cenário avançado.
3. Conexão Recusada ou Timeout
Embora não sejam estritamente falhas de "autenticação", elas geralmente precedem as tentativas de autenticação e impedem que elas comecem.
- Firewall Bloqueando: Verifique firewalls tanto no cliente (por exemplo, firewall do SO local) quanto no servidor (por exemplo,
ufw,firewalld, grupos de segurança em nuvem, ACLs de rede). Certifique-se de que a porta 22 (ou porta personalizada) esteja aberta. - Servidor SSH Não Executando: O serviço
sshdpode não estar ativo ou ter falhado. - Porta/IP Incorretos: Tentar conectar-se à porta ou endereço IP errado.
Dicas Gerais de Depuração
- Verifique
sshd_config: Sempre revise/etc/ssh/sshd_configno servidor em busca de configurações não padrão que possam estar interferindo. Após fazer alterações, sempre reinicie o daemon SSH:sudo systemctl restart sshd(ousudo service sshd restart). - Teste com um Novo Usuário/Chave: Se possível, crie um novo usuário e um novo par de chaves pública/privada. Tente autenticar com esta configuração nova. Se funcionar, o problema é específico da configuração do usuário original.
- Isole o Problema: Tente conectar-se de uma máquina cliente diferente. Se funcionar, o problema é específico do cliente. Se falhar de vários clientes, o problema é específico do servidor.
- Aumente o LogLevel (Lado do Servidor): Para depuração profunda, você pode temporariamente definir
LogLevel DEBUGem/etc/ssh/sshd_confige reiniciar osshd. Lembre-se de reverter esta configuração após a solução de problemas, pois logs de depuração podem ser muito detalhados e consumir espaço em disco.
Conclusão
Use ssh -vvv para ver o que seu cliente oferece, depois verifique os logs do servidor para saber por que o sshd rejeitou. A maioria das falhas de chave pública se resume à chave errada, uma entrada authorized_keys ausente, permissões estritas de arquivo ou uma regra sshd_config que bloqueia o usuário ou método.