![authorized_keys 有我的金鑰,但仍然被拒絕](https://rvso.com/image/756776/authorized_keys%20%E6%9C%89%E6%88%91%E7%9A%84%E9%87%91%E9%91%B0%EF%BC%8C%E4%BD%86%E4%BB%8D%E7%84%B6%E8%A2%AB%E6%8B%92%E7%B5%95.png)
我使用 ssh 從機器 M1 連接到機器 M2(連接到另一台機器上的相同使用者)。我還應該提到用戶在兩台機器上共享相同的金鑰。透過密碼驗證,一切正常;公鑰認證則不然;我已確保~/.ssh/authorized_keys
M2 上的 RSA 金鑰已獲得授權,但 ssh 仍然退回到密碼驗證。我得到以下資訊ssh -vvv
:
debug2: key: /home/joeuser/.ssh/id_rsa (0x7f42679e8200),
debug2: key: /home/joeuser/.ssh/id_dsa ((nil)),
debug2: key: /home/joeuser/.ssh/id_ecdsa ((nil)),
debug1: Authentications that can continue: publickey,password,keyboard-interactive
debug3: start over, passed a different list publickey,password,keyboard-interactive
debug3: preferred publickey,keyboard-interactive,password
debug3: authmethod_lookup publickey
debug3: remaining preferred: keyboard-interactive,password
debug3: authmethod_is_enabled publickey
debug1: Next authentication method: publickey
debug1: Offering RSA public key: /home/joeuser/.ssh/id_rsa
debug3: send_pubkey_test
debug2: we sent a publickey packet, wait for reply
debug1: Authentications that can continue: publickey,password,keyboard-interactive
debug1: Trying private key: /home/joeuser/.ssh/id_dsa
debug3: no such identity: /home/joeuser/.ssh/id_dsa: No such file or directory
debug1: Trying private key: /home/joeuser/.ssh/id_ecdsa
debug3: no such identity: /home/joeuser/.ssh/id_ecdsa: No such file or directory
debug2: we did not send a packet, disable method
我應該要提一下,我是能夠使用來自其他電腦的公鑰身份驗證進行連線(不使用相同的金鑰)。
在這種情況下,基於金鑰的身份驗證失敗的潛在原因是什麼?
注意:機器均為 SLES (SuSE Linux Enterprise Server) 11。
答案1
您使用客戶端做了正確的事情ssh -vvv
,將其與調試模式下的 sshd 配對,如下所示:
第二個伺服器實例:
# /usr/sbin/sshd -p 1234 -dddd
專用客戶端連線:
$ ssh -i .ssh/id_rsa-admuser admuser@server -p 1234 -vvvv
就我而言,事實證明關鍵資訊僅列印在客戶端上。伺服器通過了
debug2: user_key_allowed: check options...
debug2: user_key_allowed: advance ...
debug2: key not found
當客戶想出這個時:
debug1: Next authentication method: publickey
debug1: Offering public key: .ssh/id_rsa-admuser RSA SHA256:<censored> explicit agent
debug1: send_pubkey_test: no mutual signature algorithm
那麼這裡發生了什麼事?
伺服器太舊了,無法協商輔助演算法;關鍵還在於過時的,但整體來說還好。
現在的基本方法是什麼?
- 在不同的連接埠上啟動專用伺服器
- 在新會話中從客戶端連接
- 逐步比較雙方的金鑰交換
- 使用新產生的第二個金鑰對驗證結果
在這個具體示例中,有一個明確的解釋,即它是一種不安全的舊方法,已被棄用,即此處描述的。 https://confluence.atlassian.com/bitbucketserverkb/ssh-rsa-key-rejected-with-message-no-mutual-signature-algorithm-1026057701.html
為了能夠更新那個舊盒子,我可以透過新增-o PubkeyAcceptedKeyTypes=+ssh-rsa
到客戶端上的 ssh 命令列來進行連線。
答案2
檢視基礎知識:
- id_rsa 和 id_rsa.pub 存在於 M1 和 M2 上
- id_rsa 在 M1 和 M2 上都有權限 600(即只有擁有者可以讀寫)
- authorized_keys 檔案將金鑰貼上為單行(無換行符)
- authorized_keys的權限為600
- 通常,我的 .ssh 資料夾的權限為 600(預設)
- 檢查每個資料夾 /home 一直到 .ssh 的權限
- 我知道您想使用 RSA,但請嘗試 DSA 金鑰,看看它是否有效。如果是這樣,那麼我們將把 SSH 和 RSA 配置歸零。
答案3
你得到的錯誤是
/home/joeuser/.ssh/id_dsa: No such file or directory
確保此文件存在、包含與您新增的公鑰相對應的私鑰、所屬joeuser
的且具有600
使用者權限:
sudo chown joeuser /home/joeuser/.ssh/id_dsa
sudo chmod 600 /home/joeuser/.ssh/id_dsa
您還應該嘗試像這樣明確定義私鑰:
ssh -i ~/.ssh/id_rsa [email protected]
如果您不確定這是否是正確的金鑰,那麼我建議建立一個新的 RSA 金鑰對
ssh-keygen -b 4096
並將公鑰內容新增~/.ssh/id_rsa.pub
到遠端伺服器的authorized_keys檔案。確保您沒有覆蓋您仍需要登入其他伺服器的現有私鑰!