Ssh

ssh 強制使用者使用 ssh-add

  • October 8, 2017

我試圖了解此功能的工作原理。我有數字海洋帳戶。我給了數字海洋一個 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 密鑰添加到會話的工作流程如下:

  1. 執行 ssh 代理 $ SHELL, where $ SHELL 可以是bashzsh,如ssh-agent bash
  2. 使用將特定私鑰關聯到代理 shell 會話ssh-add
  3. 連接到任何主機,該主機具有您在 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

引用自:https://serverfault.com/questions/877453