"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.