
我安裝了 openssh-server 並使用ssh-keygen
.然後我嘗試透過執行以下操作使用本機連接埠轉送來測試它ssh -L 8080:www.nytimes.com:80 127.0.0.1
。但是,此命令提供的密鑰指紋不是我執行此操作時獲得的密鑰指紋ssh-keygen -l
。即使我刪除了 .ssh 目錄,我仍然得到相同的指紋,這不是我使用 .ssh 建立的指紋ssh-keygen
。我的系統上還有另一個金鑰嗎?這把鑰匙在哪裡?如何選擇此金鑰供 openssh-server 使用?
答案1
當您進行 SSH 會話時,會涉及兩個不同的金鑰對(每對都有一個指紋)。一種是用戶的密鑰,儲存在~/.ssh
.使用者的 SSH 金鑰身分有時會用作登入另一台電腦的憑證(如果您已設定基於金鑰的登入)。
另一個是 SSH 伺服器的金鑰。這是您第一次連接到不同伺服器時看到的指紋的密鑰。此金鑰的身份用於確保您正在登入您想要登入的 SSH 伺服器。如果您使用密碼,這一點很重要,因為您不想意外嘗試登入攻擊者的電腦:攻擊者會在您輸入密碼時獲取您的密碼。 (這被稱為“中間人攻擊”)SSH 伺服器在您登入時用來識別自身的金鑰位於/etc/ssh/
並且通常命名為ssh_host_rsa_key
.
實際上,您可以使用該設定來變更 SSH 伺服器在檔案中尋找金鑰的位置。/etc/ssh/sshd_config
HostKey /path/to/host/key
預設情況下,ssh-keygen
將為目前使用者建立一個金鑰,預設情況下,該金鑰將儲存在~/.ssh
.使用者密鑰和伺服器密鑰的格式相同;區別在於它們放置的位置以及是否/etc/ssh/sshd_config
有HostKey
指向它們的指令。當您安裝 openssh-server 軟體包時,它會自動產生供伺服器使用的金鑰。這就是帶有未知指紋的鑰匙的來源。如果您想查看 SSH 伺服器 (RSA*) 金鑰的指紋,您可以執行ssh-keygen -lf /etc/ssh/ssh_host_rsa_key.pub
.
*有不同的加密演算法。每個人都使用不同的密鑰。常見的是 DSA(弱)、RSA(舊預設值)和 ECDSA(新預設值)。
答案2
SSH 主機金鑰儲存在 中/etc/ssh/
,一般不需要選擇。這些金鑰是在安裝 openssh-server 軟體包時產生的。
您可以列出密鑰的指紋,ssh-keygen -l -f /etc/ssh/ssh_host_key.pub
但您需要對每個公鑰重複此操作。
答案3
ssh-keygen
不會在您的伺服器上產生 SSH 指紋。這是由 SSH 伺服器產生的。ssh-keygen
為您的系統建立一個公鑰/私鑰對,您稍後可以使用它來存取 SSH 伺服器,而無需將純文字密碼傳輸到伺服器。
您的伺服器的指紋顯然不會顯示為您產生的公鑰/私鑰對的指紋,因為它們彼此分開。