"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。
修法 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 当"修复"——那是放宽暴破窗口
Free on iOS and Android. 5 AI requests/day on the free tier, plus unlimited SSH/SFTP and built-in Tailscale.