
我有一個啟用了 ssh 訪問的 Hostgator 帳戶。當嘗試使用以下指令上傳產生的 .pub 金鑰檔案時:
rsync -av -e "ssh -p2222" /home/user/.ssh/key.pub [email protected]:.ssh/authorized_keys
我不斷得到:
收到與 111.222.33.44 的斷線:2:使用者名稱身分驗證失敗次數過多 rsync:連線意外關閉(到目前為止已收到 0 位元組)[傳送者] rsync 錯誤:io.c(601) [sender=3.0.7] 出現無法解釋的錯誤(代碼 255)
我之前一直在嘗試 ssh,直到身份驗證失敗。但現在看來身份驗證失敗計數器沒有重置(現在已經等待超過 12 小時了,技術支援「假設」它會在 30 分鐘到 1 小時後重置,另一個人告訴我「每次您嘗試使用用戶名”,天哪)。
這讓我抓狂。我什至在 Slicehost 自訂伺服器中進行了設置,並且比這些人遇到的問題更少。
有小費嗎?也許這是客戶端而不是伺服器端的東西。
答案1
這通常是由於無意中提供了多個 ssh 金鑰而導致到伺服器。提供過多密鑰後,伺服器將拒絕任何密鑰。
-v
您可以透過將標誌新增至ssh
命令中以獲取詳細輸出來親自查看這一點。您將看到提供了一堆密鑰,直到伺服器拒絕連接並說:“[用戶] 身份驗證失敗次數過多”。如果沒有詳細模式,您只會看到不明確的訊息“連接被對等方重置”。
為了防止提供不相關的金鑰,您必須在~/.ssh/config
(客戶端電腦上)文件的每個主機條目中明確指定這一點,方法IdentitiesOnly
如下新增:
Host www.somehost.com
IdentityFile ~/.ssh/key_for_somehost_rsa
IdentitiesOnly yes
Port 22
如果您使用 ssh-agent,它有助於運行ssh-add -D
以清除身份。
如果您沒有使用任何 ssh 主機配置,則必須在命令中明確指定正確的金鑰,ssh
如下所示:
ssh -i some_id_rsa -o 'IdentitiesOnly yes' them@there:/path/
注意:「IdentitiesOnly yes」參數需要位於引號之間。
或者
ssh -i some_id_rsa -o IdentitiesOnly=yes them@there:/path/
答案2
我找到了一種更簡單的方法來執行此操作(如果使用密碼身份驗證):
ssh -o PubkeyAuthentication=no [email protected]
這強制進行非金鑰身份驗證。我能夠立即登入。
答案3
我也遇到了這個錯誤,發現它發生的原因是伺服器被配置為接受最多 6 次嘗試:
/etc/ssh/sshd_config
...
...
#MaxAuthTries 6
除了在文件IdentitiesOnly yes
中設定 之外~/.ssh/config
,您還有其他幾個選項。
- 增加
MaxAuthTries
(在ssh伺服器上) - 刪除目錄中存在的一些密鑰對
~/.ssh/
並運行ssh-add -D
- 將密鑰明確連結到
~/.ssh/config
檔案中的給定主機
就像這樣:
host foo
hostname foo.example.com
IdentityFile /home/YOU/.ssh/foo
這可能不是一個好方法,因為它會稍微削弱你的 ssh 伺服器,因為它現在在給定的連接嘗試中接受更多的金鑰。在這裡考慮暴力攻擊向量。
假設您擁有不需要且可以永久刪除的金鑰,這是一個好方法。
設定 IdentitiesOnly 的方法可能是處理此問題的首選方法!
答案4
如果您收到以下 SSH 錯誤:
$ Received disconnect from host: 2: Too many authentication failures for root
如果您的 .ssh 目錄中儲存了(在我的系統上預設)五個或更多 DSA/RSA 身分文件,並且在命令列中未指定「-i」選項,則可能會發生這種情況。
ssh 用戶端將首先嘗試使用每個身分(私鑰)登錄,然後提示進行密碼驗證。但是,sshd 在五次錯誤的登入嘗試後會斷開連接(同樣,預設值可能會有所不同)。
如果 .ssh 目錄中有多個私鑰,您可以在命令列中使用「-o」可選參數停用「公鑰身份驗證」。
例如:
$ ssh -o PubkeyAuthentication=no root@host