SSH出现too many authentication failures错误的原因排查求助
问题描述
通过SSH连接主机时偶尔遇到认证失败过多的问题,多数在使用Git通过SSH操作时出现(Git SSH操作频率高于直接SSH)。
直接SSH连接时的错误信息:
Received disconnect from <server ip> port 22:2: Too many authentication failures Disconnected from <server ip> port 22
通过SSH代理连接时的错误信息:
Received disconnect from UNKNOWN port 65535:2: Too many authentication failures Disconnected from UNKNOWN port 65535 Killed by signal 1.
仅使用SSH密钥认证,几天前还能正常连接,查看ssh -v输出发现,系统会尝试.ssh/config中为此主机配置的所有IdentityFile,以及ssh-agent中所有可用身份密钥。近期因季度密钥轮换,向agent中添加了新密钥。
原因分析
- SSH服务器的认证尝试次数限制:绝大多数SSH服务器(如OpenSSH)默认会限制单个连接的认证尝试次数(通常为6次左右)。你添加新密钥后,ssh-agent中的密钥数量加上
.ssh/config里配置的IdentityFile总数,已经超过了服务器允许的上限。SSH会按顺序尝试所有可用密钥,当尝试次数达到限制时,服务器就会主动断开连接,触发该错误。 - 有效密钥的尝试顺序靠后:如果对应主机的有效密钥排在尝试列表的后半段,还没轮到它验证就已经耗尽了服务器允许的尝试次数,自然会认证失败。Git操作通常是高频或批量触发连接,这种情况会更频繁出现。
- SSH代理转发的叠加效应:使用SSH代理时,代理可能会携带本地agent的所有密钥,导致需要尝试的密钥数量进一步增加;同时代理的处理逻辑可能让尝试次数的计算更复杂,更快触达服务器上限,因此会出现端口65535的错误并被信号终止。
- .ssh/config配置冗余:如果你的
.ssh/config为该主机配置了多个IdentityFile,同时又开启了AddKeysToAgent或agent中存储了大量密钥,两者叠加会让总尝试次数暴增,直接超出服务器的限制阈值。
内容的提问来源于stack exchange,提问作者bluesmoon
相关产品推荐
相关产品推荐

