Corrigindo "Too many authentication failures"
O que está acontecendo com "Too many authentication failures"?
Conclusão: O servidor atingiu o número permitido de tentativas de autenticação (
MaxAuthTries, padrão 6) antes de alcançar sua chave correta. A chave não está errada -- você simplesmente está oferecendo muitas.
A conexão SSH em si teve sucesso e seu cliente está se comunicando com o sshd do servidor. Isso não é um problema de rede nem uma chave inválida.
Received disconnect from 203.0.113.10 port 22:2: Too many authentication failures Disconnected from 203.0.113.10 port 22
O sshd limita o número de tentativas de autenticação por conexão (MaxAuthTries, padrão 6). Com autenticação por chave pública, cada chave que o cliente oferece conta como uma tentativa. Se seu ssh-agent tem muitas chaves, o ssh as oferece em ordem independentemente de o servidor aceitá-las, e atinge o limite antes de chegar na correta.
Pré-requisitos
- Cliente: Ubuntu / macOS (os conceitos são os mesmos)
- Servidor: Ubuntu (servidor OpenSSH)
MaxAuthTriespadrão é6(o padrão dosshd_configdo OpenSSH)
O que verificar primeiro?
Conclusão: Execute
ssh -ve conte as linhasOffering public key:. Quantas chaves você oferece antes da desconexão é a evidência direta da causa.
O primeiro passo é tornar visível quantas chaves você está enviando.
$ ssh -v user@server.example.com
Linhas para observar:
debug1: Offering public key: /home/user/.ssh/id_rsa RSA SHA256:... debug1: Offering public key: /home/user/.ssh/id_ed25519 ED25519 SHA256:... debug1: Offering public key: ssh-ed25519 SHA256:... agent debug1: Offering public key: ssh-rsa SHA256:... agent ... Received disconnect from 203.0.113.10 port 22:2: Too many authentication failures
Se cerca de seis linhas Offering public key se alinham e a conexão cai logo depois, a causa está confirmada: você oferece muitas chaves e esgota MaxAuthTries antes de enviar a correta.
Linhas terminando em agent são chaves mantidas pelo ssh-agent; linhas mostrando um caminho de arquivo vêm da sua configuração ou arquivos de chave padrão. Ambas somam ao total de tentativas.
Por que oferecer muitas chaves é rejeitado?
Conclusão: O
sshdlimita tentativas por conexão aMaxAuthTries. Cada chave pública consome uma tentativa apenas por ser oferecida, então com muitas chaves o orçamento se esgota antes da chave correta ser tentada.
O mecanismo, passo a passo:
- O cliente oferece suas chaves disponíveis ao servidor em ordem.
- O servidor verifica se a chave oferecida está em
authorized_keys; se não, diz "próxima". - Cada ida e volta conta como uma tentativa.
- Quando as tentativas atingem
MaxAuthTries, o servidor desconecta sem esperar um sucesso.
Então, se você tem dez chaves e a correta é a nona, você é cortado na sexta e nunca a alcança. É isso que "too many" significa.
| Aspecto | Permission denied (publickey) |
Too many authentication failures |
|---|---|---|
| O que aconteceu | Nenhuma chave válida encontrada; auth falhou | Tentativas esgotaram antes da chave correta |
| Causa principal | Chave incompatível / permissões / config | Oferecendo muitas chaves |
| Triagem típica | Inspecionar authorized_keys |
Limitar chaves oferecidas a uma |
Se ssh-add -l lista muitas chaves, todo servidor ao qual você se conecta primeiro recebe todas essas chaves do agent oferecidas. Mesmo uma chave dedicada a um servidor pode ser desperdicada porque outras chaves do agent são consumidas primeiro.
Qual é a correção rápida para conectar agora?
Conclusão: Combine
-o IdentitiesOnly=yescom-i keypara oferecer exatamente uma chave. Isso mantém as tentativas em uma e você entra imediatamente.
$ ssh -o IdentitiesOnly=yes -i ~/.ssh/id_ed25519 user@server.example.com
IdentitiesOnly=yes é a parte crucial. Sem ele, mesmo quando você especifica uma chave com -i, o ssh também oferece as chaves no ssh-agent, então o número de tentativas não diminui. Esta é a maior armadilha aqui.
-i sozinho não é suficiente. Mesmo com -i ~/.ssh/id_ed25519, sem IdentitiesOnly=yes o ssh oferece "sua chave especificada + todas as chaves do agent". Na correção rápida, sempre use ambos juntos.
Se você não tem certeza de qual chave é a correta, adicione -v e tente uma por vez.
$ ssh -v -o IdentitiesOnly=yes -i ~/.ssh/id_rsa user@server.example.com
Se você ver Authentication succeeded (publickey), essa chave é a correta. Torne permanente com o próximo passo.
Como corrigir permanentemente no ~/.ssh/config?
Conclusão: Defina
IdentityFileeIdentitiesOnly yespor host no~/.ssh/config. A partir de então, a chave é limitada a uma automaticamente, sem opções de linha de comando.
Host myserver
HostName server.example.com
User user
IdentityFile ~/.ssh/id_ed25519
IdentitiesOnly yes
Agora ssh myserver sozinho conecta oferecendo apenas a chave especificada.
Se você gerencia vários servidores, dê a cada host seu próprio bloco.
Host prod
HostName prod.example.com
User deploy
IdentityFile ~/.ssh/id_prod
IdentitiesOnly yes
Host gitlab
HostName gitlab.example.com
User git
IdentityFile ~/.ssh/id_gitlab
IdentitiesOnly yes
IdentitiesOnly yes significa "use apenas as chaves explicitamente nomeadas no config e -i". Ele impede que você seja arrastado pelo conteúdo do agent, então ajuda mais quando você tem muitas chaves.
Como limpar chaves do ssh-agent?
Conclusão: Verifique a contagem com
ssh-add -l; se houver muitas, limpe comssh-add -De re-adicione apenas o que você precisa. Um agent inchado é a causa raiz comum de "oferecendo muitas".
Primeiro, verifique o estado atual.
$ ssh-add -l
256 SHA256:... user@host (ED25519) 3072 SHA256:... old-key (RSA) 256 SHA256:... another (ED25519) ...
Se seis ou mais estão listadas, elas consomem o orçamento de tentativas em todo servidor a menos que você use IdentitiesOnly. Remova as que você não precisa.
# Limpar tudo e re-adicionar $ ssh-add -D $ ssh-add ~/.ssh/id_ed25519
Para remover uma chave específica apenas:
$ ssh-add -d ~/.ssh/id_rsa
Se o carregamento automático de chaves está configurado (AddKeysToAgent yes ou um script de login), as chaves podem reaparecer logo após você removê-las. Se elas continuam voltando, revise a fonte de carregamento (AddKeysToAgent no ~/.ssh/config, seus scripts de inicialização do shell).
Deve-se ajustar MaxAuthTries no servidor?
Conclusão: Se você administra o servidor, aumentar
MaxAuthTriescontorna o problema, mas é um paliativo que enfraquece a resistência à força bruta. A correção adequada é limitar as chaves no cliente.
Verifique o valor efetivo com sshd -T.
$ sudo sshd -T | grep -i maxauthtries
maxauthtries 6
Somente quando uma operação realmente não pode evitar oferecer muitas chaves, aumente o valor em /etc/ssh/sshd_config.
MaxAuthTries 10
$ sudo systemctl reload ssh
Aumentar MaxAuthTries aumenta as tentativas de autenticação permitidas por conexão e reduz a resistência à força bruta de senhas e chaves. Não aumente casualmente em servidores expostos à internet. Prefira resolver no lado do cliente com IdentitiesOnly primeiro.
Para uma correção de causa raiz no servidor, em vez de aumentar MaxAuthTries, organize o authorized_keys do usuário alvo e oriente os clientes a oferecer exatamente uma chave correta. Essa é a direção mais segura.
Checklist para prevenir recorrência
Conclusão: "Oferecer exatamente uma chave" é a essência da correção. Configure
IdentitiesOnlyno seu config, organize o agent e confirme a configuração do servidor um por um, e não se repetirá.
- [ ] O
ssh -vmostra mais linhasOffering public keydo queMaxAuthTries(padrão 6)? - [ ] A correção rápida
-o IdentitiesOnly=yes -i keypermite conectar? - [ ] Você adicionou
IdentityFileeIdentitiesOnly yesao Host alvo no~/.ssh/config? - [ ] Há muitas chaves em
ssh-add -l(limpe comssh-add -Dse sim)? - [ ] Se chaves reaparecem automaticamente, você verificou
AddKeysToAgente scripts de inicialização? - [ ] Como administrador do servidor, você confirmou o
maxauthtriesefetivo comsshd -T?