ssh 強制使用者使用 ssh-add
我試圖了解此功能的工作原理。我有數字海洋帳戶。我給了數字海洋一個 ssh 公鑰來與我啟動的任何伺服器相關聯。一旦我創建了一個 droplet,如果我嘗試以 root 身份 ssh 到伺服器,它就會失敗,但是如果我執行 ssh-add 並給它一個我用我的數字海洋帳戶定義的特定密鑰,那麼它允許我登錄. 如果我要添加另一個使用者帳戶並將不同的公鑰放入該帳戶的 authorized_hosts 文件中,我將能夠在不使用 ssh-add 的情況下登錄。
有人可以向我解釋這個功能是如何工作的嗎?如何強制使用者使用 ssh-add?
編輯:我做了一個詳細的 ssh,似乎只嘗試了這些鍵,但沒有嘗試我的 .ssh 目錄中的任何其他鍵,包括我為數字海洋設置的鍵。我懷疑這可能是問題的一部分。
debug1: Authentications that can continue: publickey debug1: Trying private key: /Users/username/.ssh/id_dsa debug3: no such identity: /Users/username/.ssh/id_dsa: No such file or directory debug1: Trying private key: /Users/username/.ssh/id_ecdsa debug3: no such identity: /Users/username/.ssh/id_ecdsa: No such file or directory debug1: Trying private key: /Users/username/.ssh/id_ed25519 debug3: no such identity: /Users/username/.ssh/id_ed25519: No such file or directory debug2: we did not send a packet, disable method debug1: No more authentication methods to try.
我認為從概念上講,您將執行 SSH 代理與向已經執行的 SSH 代理添加密鑰的想法混淆了。
通常,將 SSH 密鑰添加到會話的工作流程如下:
- 執行 ssh 代理 $ SHELL, where $ SHELL 可以是
bash
等zsh
,如ssh-agent bash
- 使用將特定私鑰關聯到代理 shell 會話
ssh-add
- 連接到任何主機,該主機具有您在 shell 會話中使用的私鑰的特定公鑰
authorized_hosts
。請注意,您可以隨時使用
ssh-add -l
來查看已載入的密鑰。因此,在這種情況下,您能夠連接的原因是您
ssh-add
用於將密鑰添加到目前會話中,當您嘗試通過 ssh 時會自動檢查該會話account@host
如果您使用以下命令將詳細程度標誌添加到 SSH 嘗試中,您可以看到此檢查的範例
-v(vvv)
:debug1: Offering RSA public key: /home/patrick/.ssh/id_rsa debug3: send_pubkey_test debug3: send packet: type 50 debug2: we sent a publickey packet, wait for reply debug3: receive packet: type 60 debug1: Server accepts key: pkalg rsa-sha2-512 blen 279
只有,我得到
-v
以下資訊:(添加更多的 v 會增加您獲得的調試詳細程度)debug1: Offering RSA public key: /home/patrick/.ssh/id_rsa debug1: Server accepts key: pkalg rsa-sha2-512 blen 279 debug1: Authentication succeeded (publickey).
您的初始 SSH 會話未執行操作而失敗的原因
ssh-add
可能是因為您的密鑰儲存在預設情況下不通過 SSH 檢查的特定目錄中。但是,當您執行時,ssh-add
您將密鑰添加到整個會話中,並且 SSH 知道預設使用它而不是搜尋~/.ssh
或其他地方。根據SSH 手冊頁:
-i 身份文件
選擇從中讀取 RSA 或 DSA >authentication 的身份(私鑰)的文件。協議版本 1 的預設值是 ~/.ssh/identity,協議版本 2 的預設值是 ~/.ssh/id_rsa 和 ~/.ssh/id_dsa。身份文件也可以在配置文件中基於每個主機指定。可以有多個 -i 選項(以及在配置文件中指定的多個身份)。
因此,如果您的密鑰被命名為不是上述文件名的名稱,或者位於其他位置,除非您專門使用該
-i
標誌來指示路徑和文件名,或者您將ssh-add
其添加到會話中,否則 SSH 將不會看到它。
-i
您可以通過使用帶有 SSH 的標誌來測試您的密鑰來測試這個理論。如果您要執行ssh -i $KEYLOCATION account@host
,您應該成功登錄。仔細檢查您的私鑰文件是否在
~/.ssh
其中並命名為 id_rsa 或任何可能的密鑰類型。擁有它可能意味著您將來不必執行ssh-add
。