題 *用戶名*的身份驗證失敗太多


我有一個啟用了ssh訪問的hostgator帳戶,並且在嘗試使用以下命令上傳生成的.pub密鑰文件時:

rsync -av -e“ssh -p2222”/home/user/.ssh/key.pub username@111.222.33.44:.ssh / authorized_keys

我一直在:

從111.222.33.44收到斷開連接:2:用戶名的身份驗證失敗太多
rsync:連接意外關閉(到目前為止收到0個字節)[sender]
rsync錯誤:io.c上的無法解釋的錯誤(代碼255)(601)[sender = 3.0.7]

我以前用ssh一直在玩弄,直到我得到了auth失敗。但現在似乎auth故障計數器沒有重置(現在等待超過12個小時,技術支持“假設”它在30分鐘到1小時後重置,另一個人告訴我“每次你嘗試登錄時都會重置用戶名“,jeesh)。

這讓我瘋了。我甚至在Slicehost定制服務器中設置了這個,並且比這些人的問題少。有提示嗎?也許它是客戶端而不是服務器端。


231
2017-09-12 17:14


起源




答案:


這通常是 由無意中提供多個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/

374
2017-09-12 17:53



我不清楚在哪裡放這條線。在我嘗試登錄的服務器上,.ssh / config僅包含其他服務器的信息。你的意思是這應該放在我試圖ssh的計算機上的.ssh / config文件中嗎?如果是這樣,目前還不清楚,因為你的回答是“一旦你重新登錄......” - David LeBauer
我必須將選項放在雙引號中,如下所示: ssh -i some_id_rsa -o "IdentitiesOnly yes" them@there:/path/ - knb
Windows用戶運行PAGENT(Putty Agent),檢查以確保只有您需要加載的密鑰。我在意外加載所有私鑰後遇到了這個問題。 - Chris Rasco
但是,對於 SSHFS (保險絲)我必須用強制性等號寫出選項,如下所示: sshfs -o "IdentitiesOnly=yes" -o IdentityFile=~/.ssh/id_dsa them@there/var/tmp /mnt/tmp  (Ubuntu 13.10) - knb
它可以在沒有引號的情況下使用,如下所示: -o IdentitiesOnly=yes - Valentin Kantor


我找到了一種更簡單的方法(如果使用密碼驗證):

ssh -o PubkeyAuthentication=no username@hostname.com

這會強制進行非密鑰身份驗證。我能夠立即登錄。

參考


163
2018-03-25 00:14



+1,希望我能給你更多。 Raspberry Pi是我沒有公鑰的唯一設備。得到:“pi認證失敗太多” - blak3r
並使用它 rsync: rsync -av -e 'ssh -o PubkeyAuthentication=no' 'user@host.com:~/remote_file' 'local_file' - Ciro Santilli 新疆改造中心 六四事件 法轮功
您還可以創建別名,以便更快地進行密碼驗證。別名sshp ='ssh -o PubkeyAuthentication = no' - dhempler


我也收到了這個錯誤,發現它發生了b / c服務器配置為最多接受6次嘗試:

/etc/ssh/sshd_config
...
...
#MaxAuthTries 6

除了設置 IdentitiesOnly yes 在你的 ~/.ssh/config 文件你還有其他幾個選擇。

  1. 增加 MaxAuthTries (在ssh服務器上)
  2. 刪除你的一些密鑰對 ~/.ssh/ 目錄和運行 ssh-add -D 
  3. 明確地將密鑰鏈接到您的主機中的給定主機 ~/.ssh/config 文件

像這樣:

host foo
hostname foo.example.com
IdentityFile /home/YOU/.ssh/foo
  1. 可能不是一個很好的方法,因為它會削弱你的ssh服務器,因為它現在會在給定的連接嘗試中接受更多的密鑰。在這裡想想蠻力攻擊向量。

  2. 假設您擁有不需要的密鑰並且可以永久刪除,這是一個好方法。

  3. 設置IdentitiesOnly的方法可能是處理這個問題的首選方法!


24
2018-06-09 04:56



在你的最後一行你有識別文件/home/YOU/.ssh/foo但它應該是identityfile(一個不是f) - Nin
@Nin - 謝謝,修復。 - slm


我添加到〜/ .ssh / config這個:

Host *
IdentitiesOnly yes

它默認啟用選項IdentitiesOnly = yes。如果您需要使用私鑰連接,則應使用選項-i指定它


6
2017-07-23 17:29





如果您有密碼,並且只想使用密碼登錄,請按照以下方式進行操作。

要僅使用密碼身份驗證而不使用公鑰,並且不使用有些誤導性的“鍵盤交互”(這是包含密碼的超集),您可以從命令行執行此操作:

ssh -o PreferredAuthentications=password user@example.com

6
2018-06-19 14:22





如果您收到以下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

5
2017-09-20 21:44



這正是發生在我身上的事情!非常感謝您的解釋;) - El Ninja Trepador


離開@David說,只需添加它 IdentitiesOnly yes 對你的.ssh / config,它做同樣的事情 ssh -o PubkeyAuthentication=no.

登錄後,刪除 .ssh/authorized_keys。 現在,返回本地計算機並鍵入以下內容

cat ~/.ssh/id_rsa.pub | ssh -o PubkeyAuthentication=no user@IP_ADDR 'cat >> .ssh/authorized_keys'。這應該使用公鑰重新啟用您的ssh


2
2018-01-25 05:48





我知道這是一個舊線程,但我只想在這裡添加我遇到相同的錯誤消息,但它是由.ssh文件夾的所有者為root而不是使用該密鑰的用戶引起的。我通過運行以下命令更正了此問題:

sudo chown -R user:user /home/user/.ssh

我還確保.ssh文件夾上的權限是正確的:

sudo chmod 700 /home/user/.ssh

.ssh目錄中的文件應具有600的權限:

sudo chmod 600 /home/user/.ssh/authorized_keys

2
2018-06-13 17:37



我會小心使用它而不需要注意。某些密鑰(特別是AWS)的SSH密鑰權限通常限制為400。嘗試將它們設置在上面會導緻密鑰無法被接受,並且可能會使您無法訪問您的AWS賬戶。 - Michael Ryan Soileau