我的問題是基於以下場景:serverA
、serverB
、user1
和user2
。兩個用戶都出現在兩台伺服器上。
user1
onserverA
已產生 SSH 金鑰對,並將公鑰複製到authorized_keys
上的檔案中serverB
。
user2
onserverA
沒有產生 SSH 金鑰對,且 on 也沒有產生serverB
。
user1
登入serverA
.user1
嘗試透過 SSH 連接到serverB
as user2
( ssh user2@serverb
),它工作正常,不需要密碼。
我的問題是這樣的。這是如何運作的?user2
上沒有公鑰serverB
。我一直認為 SSH 會對嘗試登入的使用者進行身份驗證。這是否意味著 SSH on對serverB
目前登入進行身份驗證?user1
serverA
答案1
這聽起來根本不對。您使用 OpenSSH 嗎?或其他一些 ssh 實作?
回到你的問題,它是如何運作的,它正如你所期望的(簡化的):
- 連接到遠端系統。
- 透過用戶名。
- 遠端系統驗證使用者是否存在並請求金鑰(如果配置了金鑰身份驗證)。
- 檢查使用者 HOME/.ssh/authorized_keys 是否存在
- 一項一項地檢查authorized_keys 中的條目,直到一項有效,或無一項為止。
- 如果找到匹配的金鑰,則身份驗證成功。
這一切都基於目標使用者 ~.ssh/authorized_keys 檔案中的金鑰。如果沒有這樣的文件/金鑰,則某些東西會嚴重損壞。
答案2
在評論中,您提到了.rht_authorised key
.
預設的每使用者授權金鑰檔案應該是~/.ssh/authorized_keys
指~
使用者的主目錄。如果.rht_authorised
使用,則表示正在使用非預設 OpenSSH 配置。
/etc/ssh/sshd_config
可以(使用AuthorizedKeysFile
關鍵字)為授權金鑰檔案定義不同的位置(或多個位置):如果將其定義為絕對路徑並且定義中沒有使用%h
,%u
或等標記%U
,則所有使用者將使用相同的授權金鑰文件。
在較新的 OpenSSH 版本中,還有一個AuthorizedKeysCommand
關鍵字,它定義一個程式或腳本,用於在驗證使用者身分時尋找公鑰。預設不使用它,但可能會在某些託管或雲端設定中使用。
報告什麼grep -i authorizedkeys /etc/ssh/sshd_config
?