Corrigindo "Too many authentication failures"
O que esta acontecendo com "Too many authentication failures"?
Conclusao: O servidor atingiu o numero permitido de tentativas de autenticacao (
MaxAuthTries, padrao 6) antes de alcancar sua chave correta. A chave nao esta errada -- voce simplesmente esta oferecendo muitas.
A conexao SSH em si teve sucesso e seu cliente esta se comunicando com o sshd do servidor. Isso nao e um problema de rede nem uma chave invalida.
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 numero de tentativas de autenticacao por conexao (MaxAuthTries, padrao 6). Com autenticacao por chave publica, 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 aceita-las, e atinge o limite antes de chegar na correta.
Pre-requisitos
- Cliente: Ubuntu / macOS (os conceitos sao os mesmos)
- Servidor: Ubuntu (servidor OpenSSH)
MaxAuthTriespadrao e6(o padrao dosshd_configdo OpenSSH)
O que verificar primeiro?
Conclusao: Execute
ssh -ve conte as linhasOffering public key:. Quantas chaves voce oferece antes da desconexao e a evidencia direta da causa.
O primeiro passo e tornar visivel quantas chaves voce esta 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 conexao cai logo depois, a causa esta confirmada: voce oferece muitas chaves e esgota MaxAuthTries antes de enviar a correta.
Linhas terminando em agent sao chaves mantidas pelo ssh-agent; linhas mostrando um caminho de arquivo vem da sua configuracao ou arquivos de chave padrao. Ambas somam ao total de tentativas.
Por que oferecer muitas chaves e rejeitado?
Conclusao: O
sshdlimita tentativas por conexao aMaxAuthTries. Cada chave publica consome uma tentativa apenas por ser oferecida, entao com muitas chaves o orcamento se esgota antes da chave correta ser tentada.
O mecanismo, passo a passo:
- O cliente oferece suas chaves disponiveis ao servidor em ordem.
- O servidor verifica se a chave oferecida esta em
authorized_keys; se nao, diz "proxima". - Cada ida e volta conta como uma tentativa.
- Quando as tentativas atingem
MaxAuthTries, o servidor desconecta sem esperar um sucesso.
Entao, se voce tem dez chaves e a correta e a nona, voce e cortado na sexta e nunca a alcanca. E isso que "too many" significa.
| Aspecto | Permission denied (publickey) |
Too many authentication failures |
|---|---|---|
| O que aconteceu | Nenhuma chave valida encontrada; auth falhou | Tentativas esgotaram antes da chave correta |
| Causa principal | Chave incompativel / permissoes / config | Oferecendo muitas chaves |
| Triagem tipica | Inspecionar authorized_keys |
Limitar chaves oferecidas a uma |
Se ssh-add -l lista muitas chaves, todo servidor ao qual voce 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 sao consumidas primeiro.
Qual e a correcao rapida para conectar agora?
Conclusao: Combine
-o IdentitiesOnly=yescom-i keypara oferecer exatamente uma chave. Isso mantem as tentativas em uma e voce entra imediatamente.
$ ssh -o IdentitiesOnly=yes -i ~/.ssh/id_ed25519 user@server.example.com
IdentitiesOnly=yes e a parte crucial. Sem ele, mesmo quando voce especifica uma chave com -i, o ssh tambem oferece as chaves no ssh-agent, entao o numero de tentativas nao diminui. Esta e a maior armadilha aqui.
-i sozinho nao e suficiente. Mesmo com -i ~/.ssh/id_ed25519, sem IdentitiesOnly=yes o ssh oferece "sua chave especificada + todas as chaves do agent". Na correcao rapida, sempre use ambos juntos.
Se voce nao tem certeza de qual chave e a correta, adicione -v e tente uma por vez.
$ ssh -v -o IdentitiesOnly=yes -i ~/.ssh/id_rsa user@server.example.com
Se voce ver Authentication succeeded (publickey), essa chave e a correta. Torne permanente com o proximo passo.
Como corrigir permanentemente no ~/.ssh/config?
Conclusao: Defina
IdentityFileeIdentitiesOnly yespor host no~/.ssh/config. A partir de entao, a chave e limitada a uma automaticamente, sem opcoes 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 voce gerencia varios servidores, de a cada host seu proprio 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 voce seja arrastado pelo conteudo do agent, entao ajuda mais quando voce tem muitas chaves.
Como limpar chaves do ssh-agent?
Conclusao: Verifique a contagem com
ssh-add -l; se houver muitas, limpe comssh-add -De re-adicione apenas o que voce precisa. Um agent inchado e 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 estao listadas, elas consomem o orcamento de tentativas em todo servidor a menos que voce use IdentitiesOnly. Remova as que voce nao precisa.
# Limpar tudo e re-adicionar $ ssh-add -D $ ssh-add ~/.ssh/id_ed25519
Para remover uma chave especifica apenas:
$ ssh-add -d ~/.ssh/id_rsa
Se o carregamento automatico de chaves esta configurado (AddKeysToAgent yes ou um script de login), as chaves podem reaparecer logo apos voce remove-las. Se elas continuam voltando, revise a fonte de carregamento (AddKeysToAgent no ~/.ssh/config, seus scripts de inicializacao do shell).
Deve-se ajustar MaxAuthTries no servidor?
Conclusao: Se voce administra o servidor, aumentar
MaxAuthTriescontorna o problema, mas e um paliativo que enfraquece a resistencia a forca bruta. A correcao adequada e limitar as chaves no cliente.
Verifique o valor efetivo com sshd -T.
$ sudo sshd -T | grep -i maxauthtries
maxauthtries 6
Somente quando uma operacao realmente nao 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 autenticacao permitidas por conexao e reduz a resistencia a forca bruta de senhas e chaves. Nao aumente casualmente em servidores expostos a internet. Prefira resolver no lado do cliente com IdentitiesOnly primeiro.
Para uma correcao de causa raiz no servidor, em vez de aumentar MaxAuthTries, organize o authorized_keys do usuario alvo e oriente os clientes a oferecer exatamente uma chave correta. Essa e a direcao mais segura.
Checklist para prevenir recorrencia
Conclusao: "Oferecer exatamente uma chave" e a essencia da correcao. Configure
IdentitiesOnlyno seu config, organize o agent e confirme a configuracao do servidor um por um, e nao se repetira.
- [ ] O
ssh -vmostra mais linhasOffering public keydo queMaxAuthTries(padrao 6)? - [ ] A correcao rapida
-o IdentitiesOnly=yes -i keypermite conectar? - [ ] Voce adicionou
IdentityFileeIdentitiesOnly yesao Host alvo no~/.ssh/config? - [ ] Ha muitas chaves em
ssh-add -l(limpe comssh-add -Dse sim)? - [ ] Se chaves reaparecem automaticamente, voce verificou
AddKeysToAgente scripts de inicializacao? - [ ] Como administrador do servidor, voce confirmou o
maxauthtriesefetivo comsshd -T?