Corrigindo "Too many authentication failures"

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)
  • MaxAuthTries padrao e 6 (o padrao do sshd_config do OpenSSH)

O que verificar primeiro?

Conclusao: Execute ssh -v e conte as linhas Offering 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 sshd limita tentativas por conexao a MaxAuthTries. 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:

  1. O cliente oferece suas chaves disponiveis ao servidor em ordem.
  2. O servidor verifica se a chave oferecida esta em authorized_keys; se nao, diz "proxima".
  3. Cada ida e volta conta como uma tentativa.
  4. 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=yes com -i key para 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.

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 IdentityFile e IdentitiesOnly yes por 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 com ssh-add -D e 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 MaxAuthTries contorna 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

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 IdentitiesOnly no seu config, organize o agent e confirme a configuracao do servidor um por um, e nao se repetira.

  • [ ] O ssh -v mostra mais linhas Offering public key do que MaxAuthTries (padrao 6)?
  • [ ] A correcao rapida -o IdentitiesOnly=yes -i key permite conectar?
  • [ ] Voce adicionou IdentityFile e IdentitiesOnly yes ao Host alvo no ~/.ssh/config?
  • [ ] Ha muitas chaves em ssh-add -l (limpe com ssh-add -D se sim)?
  • [ ] Se chaves reaparecem automaticamente, voce verificou AddKeysToAgent e scripts de inicializacao?
  • [ ] Como administrador do servidor, voce confirmou o maxauthtries efetivo com sshd -T?

Proximas leituras