1. 程式人生 > 其它 >ssh金鑰登入失敗(轉)

ssh金鑰登入失敗(轉)

https://www.chenyudong.com/archives/ssh-public-key-authentication-refused.html

搞一個ssh的金鑰登入,結果發現就是無法使用金鑰登入,非讓我輸入密碼。苦惱。

輸入ssh連線程式碼

ssh -i private.key -v [email protected] -p22

從連線的資訊中看不出有什麼問題。

debug1: Authentications that can continue: publickey,gssapi-keyex,gssapi-with-mic,password
debug1: Next authentication method: publickey
debug1: Offering public key: private.key
debug1: Authentications that can continue: publickey,gssapi-keyex,gssapi-with-mic,password
debug1: Next authentication method: password

已經提示說了,使用公鑰登入,並且提供了私鑰,但是還是提示讓我輸入密碼。

但是我使用另外一個帳號去登入,發現是ok的,可以登入成功。我把成功的那個authorized_keys複製到我的那個使用者名稱下,發現還是不能登入。但是驗證了伺服器的sshd功能是正常執行的,否則另外一個賬戶就沒辦法登入了。我覺得兩個使用者名稱的所在的環境應該是相同了,但是確實無法登入。

想到了客戶端這裡的連線沒有更多有效的資訊,那就想到了去伺服器上看看相關的資訊。vim /var/log/secure檢視一下日誌。發現有這麼一段話:

Authentication refused: bad ownership or modes for directory /home/user/.ssh

上網搜了一下這個問題,發現原來是.ssh的目錄許可權不對,設定一下正確的許可權:

chmod 700 ~/.ssh

在此過程中還學習到了一個sshd的測試模式。

 /usr/sbin/sshd -p 10022 -d
      -d     以除錯模式執行。伺服器將在前臺執行併發送非常詳細的除錯日誌資訊,
             伺服器將只允許接入一個連線,並且不派生出子程序。僅用於除錯目的。
             使用多個 -d 選項可以輸出更詳細的除錯資訊(最多3個)。

會開啟一個sshd的除錯模式,新建一個10022埠,在客戶端連線這個埠的時候,伺服器端會有debug日誌輸出在螢幕上,這個時候就可以檢視詳細的資訊。然後再針對資訊進行解決。

總結

伺服器使用者對於ssh目錄許可權有一些許可權要求,許可權不對的話ssh無法工作,建議以下許可權作為最小的許可權。

chmod 700 .ssh          # chmod 755 .ssh 也是可以的
chmod 600 .ssh/authorized_keys
chmod 400 .ssh/private.key  #把金鑰的許可權也設定為最小

終於又可以愉快的程式設計了。