是ssh-copy-id -i blah.pub user@host
用-i指定的私鑰的公鑰形式登錄,還是用 登入~/.ssh/id_rsa
? ”
如果答案是使用 ~/.ssh/id_rsa, / SSH 預設使用的金鑰登錄,而不是使用 -i 指定的公鑰的私鑰形式登錄,為什麼這裡會出錯呢?
我有一個私鑰和公鑰對, rodney 和 rodney.pub 如果我將文件 rodney 重命名為 roddney,然後我執行 ssh-copy-id -i ./rodney.pub user@ip 我希望它能夠登錄並儘管我收到錯誤“錯誤:無法打開ID 文件'./rodney':沒有這樣的文件”,但仍執行其附加操作。如果我將 roddney 重新命名為 rodney,那麼我就不會收到該錯誤。如果 ssh-copy-id 所做的只是 ssh(預設使用 id_rsa 登入),然後複製 rodney.pub 的話,為什麼 ssh-copy-id 需要或關心私鑰 rodney?
答案1
ssh-copy-id -i blah.pub user@host,是使用-i指定的公鑰的私鑰形式登錄,還是使用~/.ssh/id_rsa登入?
它不會使用 -i 指定的公鑰的私鑰形式登入。
它使用 ssh 預設使用的密鑰登入。 ~/.ssh/id_rsa,(儘管如果 ssh-agent 正在運行,那麼 ssh 可能會嘗試其他密鑰,但無論哪種方式..它都不會使用 -i 指定的公鑰的私鑰形式登錄)。我們假設您沒有運行 ssh-agent,我認為這也是問題中的假設。
如果答案是使用 ~/.ssh/id_rsa, / SSH 預設使用的金鑰登錄,而不是使用 -i 指定的公鑰的私鑰形式登錄,為什麼這裡會出錯呢?
我有一個私鑰和公鑰對, rodney 和 rodney.pub 如果我將文件 rodney 重命名為 roddney,然後我執行 ssh-copy-id -i ./rodney.pub user@ip 我希望它能夠登錄並儘管我收到錯誤“錯誤:無法打開ID 文件'./rodney':沒有這樣的文件”,但仍執行其附加操作。如果我將 roddney 重新命名為 rodney,那麼我就不會收到該錯誤。如果 ssh-copy-id 所做的只是 ssh(預設使用 id_rsa 登入),然後複製 rodney.pub 的話,為什麼 ssh-copy-id 需要或關心私鑰 rodney?
不久前我和一位 ssh 專家討論過這個問題。
我的用例是我有一台筆記型電腦和一些 VPS,我想要一個 VPS 透過 SSH/SFTP 連接到所有其他 VPS。我的筆記型電腦已經可以透過 SSH 存取所有 VPS。
我可以做的是在筆記型電腦上產生金鑰對,然後將公鑰 ssh-copy-id 到所有 VPS。然後將我從筆記型電腦產生的私鑰移動或複製到第一個 VPS 上。
但我所做的(這導致了一個令我困惑並讓我詢問的錯誤),我在筆記型電腦上產生了金鑰對,我將產生的私鑰從筆記型電腦複製到了第一個 VPS。然後,我從筆記型電腦中刪除了該私鑰,因為我認為(錯誤地)我不再需要在筆記型電腦上使用它。因為(我實際上正確地認為)ssh-copy-id 不會使用它來登入我的任何 VPS。所以我這樣做了ssh-copy-id -i blah.pub user@IPofFirstVPS
,但出現了錯誤。
ssh-copy-id 確實需要金鑰對,因此,私鑰和公鑰都需要。
因此,如果您這樣做,ssh-copy-id -i blah.pub user@host
那麼它需要指定的公鑰檔案的私鑰形式。
如果您要這樣做,ssh-copy-id blah
那麼它會將 .pub 寫入檔案名稱並執行 .pub 操作 ssh-copy-id blah.pub
。因此,不妨將 .pub 放在其末尾,即指定公鑰檔案名稱而不是私鑰檔案名稱。
但它需要私鑰只是一個「安全檢查」。從某種意義上說,這只是它在執行任務之前所做的測試,將公鑰附加到遠端authorized_keys 檔案中。理論上,它甚至不需要進行該檢查即可進行登入和附加。
它預期/猜測,並且可能猜測錯誤,將來您可能會使用您指定的公共 ID 的私鑰形式,從執行 ssh-copy-id 的那台電腦通過 SSH 連接到遠端主機,因此您將需要運行ssh -copy-id 的電腦上使用該私鑰! (它不認為哦,也許您產生金鑰對的目的是在其他機器上使用該私鑰,但只是在您所在的機器上使用 ssh-copy-id,因為該機器可以透過 ssh 存取許多您的其他機器)。
ssh-copy-id 不使用公鑰對的私鑰形式登入。
ssh-copy-id 有一個選項 -o,您可以在其中指定用於登入的私鑰。
我沒有設定 ssh-agent,因此我的 ssh 使用私鑰 ~/.ssh/id_rsa 連接,這就是 ssh-copy-id 將使用 -i 中指定的任何公鑰登入的私鑰。但它仍然會檢查 -i 中指定的公鑰的私鑰檔案名稱是否存在!
ssh-copy-id 是一個腳本,例如它甚至以 開頭,#!/bin/sh
因此熟悉腳本的人甚至可以 cat/vim 它並檢查和查看。