排错

SSH "Too many authentication failures":真正的原因与修法

服务器对每次连接的认证尝试设上限(MaxAuthTries,默认 6)——密钥多的客户端会把错的先递一遍、把次数烧光。用 IdentitiesOnly yes + 对的 IdentityFile 修,移动端把密钥固定到连接。

CC Chen Chen· 创始人·2026 年 6 月 11 日·阅读 4 分钟

"Too many authentication failures" 是什么意思

服务器切断了你,因为你的客户端在一次连接里做了太多认证尝试——OpenSSH 默认允许 6 次(MaxAuthTries)。反直觉的是:你通常自己什么都没试错就看到它。原因几乎总是客户端装了很多密钥:它递密钥 1、密钥 2、密钥 3……每次被拒都计一次失败,在对的那把密钥(或你的密码)轮到之前你就被断开了。解法是只递对的那把。

为什么客户端会把所有密钥都递一遍

SSH agent 和客户端会积攒密钥:~/.ssh 里的每一把、加进 ssh-agent 的每一把、别的服务器的密钥。默认客户端会按顺序全试一遍。五把错的 = 五次失败 = 只剩一次机会。攒了 6+ 把密钥的人会被每台新服务器拒绝——在懂这个机制之前显得莫名其妙。

修法 1——只递对的密钥(桌面)

# 一次性:强制单把密钥,无视 agent 里那一堆
ssh -o IdentitiesOnly=yes -i ~/.ssh/the_right_key user@host

# 永久:在 ~/.ssh/config 按主机配置
Host myserver
    HostName 203.0.113.7
    User deploy
    IdentityFile ~/.ssh/the_right_key
    IdentitiesOnly yes

IdentitiesOnly yes 是关键指令:它阻止客户端把 agent 里的每把密钥都在服务器面前排队展示。

修法 2——移动端,把密钥固定到连接上

移动客户端天然不容易踩这个坑——前提是连接配置了一把特定密钥。在 TermAI 里,每条连接有自己的认证设置:选中属于这台服务器的那把密钥,客户端就只递它一把,失败计数永远堆不起来。如果你导入了好几把、不确定服务器认哪把,报错信息本身写着用户和主机——你可以从另一个能用的会话让助手去查 authorized_keys

用单把固定密钥连上的 SSH 会话
一条连接、一把固定密钥:客户端递的正是对的凭证,MaxAuthTries 计数永远填不满。

修法 3——服务器端(慎用)

可以/etc/ssh/sshd_config 里调高上限:

MaxAuthTries 10
# 然后:sudo systemctl restart ssh

但把它当权宜之计、不是修复——更高的上限也给暴破者每次连接更多挥棒机会(fail2ban 能缓解)。真正的修复是客户端先递对的密钥。另外:密码认证下反复敲错也会触发这个限制——那个就只能仔细打字,或换成密钥

常见问题

为什么我一连上就 "Too many authentication failures"?
你的客户端/agent 持有多把密钥并全部递出;每把被拒的都计入服务器的 MaxAuthTries(默认 6)。在对的凭证被尝试之前你就被切断了。

不动服务器怎么修?
强制那把对的密钥:ssh -o IdentitiesOnly=yes -i ~/.ssh/key user@host,或在 ~/.ssh/config 里设 IdentitiesOnly yes。移动端把特定密钥挂到连接上。

该调高 MaxAuthTries 吗?
只当权宜之计——它同样帮了攻击者。在客户端固定对的密钥才是正解。

快速事实

  • 含义:一次连接里认证尝试太多(默认上限 6,MaxAuthTries)
  • 真实原因:客户端/agent 把整堆密钥都递了,错的在前
  • 修法:IdentitiesOnly yes + 那把对的 IdentityFile;移动端按连接固定密钥
  • 避免:把调高 MaxAuthTries 当"修复"——那是放宽暴破窗口
Try TermAI

Free on iOS and Android. 5 AI requests/day on the free tier, plus unlimited SSH/SFTP and built-in Tailscale.

CC
Chen Chen — Founder of TermAI

Writes about mobile DevOps, terminal UX, and the surprising depth of "boring" infrastructure.

Was this useful? ← Back to blog