如何修復“警告:遠端主機標識已更改!”

已發表: 2024-10-16
目錄
  • 了解警告
  • 驗證伺服器的身份
  • 解決方案 1:手動刪除舊主機金鑰(Windows、Mac、Ubuntu)
  • 解決方案 2:清除整個known_hosts 檔案(Windows、Mac、Ubuntu)
  • 解決方案 3:暫時忽略主機金鑰檢查(Windows、Mac、Ubuntu)
  • 解決方案 4:手動新增新的主機金鑰(Windows、Mac、Ubuntu)
  • 解決方案 5:檢查 DNS 或 IP 位址變更(Windows、Mac、Ubuntu)
  • 未來避免此問題的最佳實務(Windows、Mac、Ubuntu)
  • 結論

當您嘗試使用 SSH 連線到遠端伺服器時,您可能會遇到錯誤訊息: “警告:遠端主機識別已變更!” 。此訊息是 SSH 用來保護您免受中間人攻擊的安全功能,第三方可能會攔截您與伺服器的通訊。

簡單來說,此警告告訴您伺服器的指紋(儲存在本機上的唯一識別碼)與 SSH 之前記錄的不符。這可能是合法的更改,例如重新安裝伺服器或其 IP 位址更改,但也可能表示潛在的安全威脅。 SSH 會阻止連接以保護您的系統,直到您驗證伺服器的真實性。

在本文中,我們將介紹如何在MacUbuntu (Linux)Windows系統上安全地解決此問題,確保您可以繼續安全連接,而不會忽略潛在風險。

您可能有興趣閱讀:如何修復錯誤權限被拒絕(Publickey)

了解警告

為什麼會出現警告?

SSH 將遠端伺服器金鑰的指紋儲存在本機上名為known_hosts的檔案中。此指紋用於驗證您每次使用 SSH 時是否連接到相同伺服器。如果伺服器的指紋發生變化,SSH 會向您顯示警告,因為它無法確定伺服器的身份是否已合法更改,或者是否有人試圖攔截您的連線。

警告的常見場景:

  • 伺服器重新安裝或升級:如果伺服器已重新安裝、重置或升級,它可能會產生新的 SSH 金鑰,該金鑰與您的known_hosts檔案中儲存的金鑰不符。
  • IP 位址變更:如果伺服器的 IP 位址已變更(例如,由於轉移到新的託管提供者或網路),SSH 可能會將其標記為可疑變更。
  • DNS 變更:如果伺服器的 DNS 記錄中有更新或設定錯誤,SSH 可能會將其解釋為不同的伺服器。
  • 伺服器配置變更:有時,伺服器管理員會變更其 SSH 金鑰配置,從而導致新金鑰與前一個金鑰不符。
  • 潛在的安全威脅(中間人攻擊):該警告可能是有人試圖攔截您與伺服器的連線的訊號。如果您不確定所做的更改,則必須在繼續之前驗證伺服器的身份。

known_hosts檔案的作用:

known_hosts檔案是 SSH 儲存您先前連接到的遠端主機的資訊的位置。該檔案通常位於 Mac 和 Ubuntu 上的~/.ssh/目錄中,對於 Windows 上的PuTTY用戶,它將主機金鑰儲存在 Windows 登錄中。

驗證伺服器的身份

在進行任何更改之前,請先解決「遠端主機標識已更改!」的問題。 ” 警告,驗證伺服器的身份是否已合法更改至關重要。此步驟可確保您不會成為中間人攻擊的受害者。

為什麼應該先驗證伺服器的身份

忽略此步驟可能會導致連接到受損或惡意的伺服器,這可能會使您的資料或憑證面臨風險。請務必認真對待此警告,尤其是當您不確定伺服器最近的變更時。

驗證伺服器身分的步驟:

  • 聯絡伺服器管理員:如果您不是維護伺服器的人,請聯絡管理員或託管供應商,詢問最近是否進行了任何更改,例如 IP 位址更改、伺服器重新安裝或金鑰重新生成。
  • 比較主機金鑰指紋:使用下列指令手動檢查伺服器的主機金鑰:
     ssh-keygen -lf /etc/ssh/ssh_host_rsa_key.pub

    輸出將顯示主機金鑰指紋,您可以將其與known_hosts檔案中的指紋或伺服器管理員請求的指紋進行比較。

解決方案 1:手動刪除舊主機金鑰(Windows、Mac、Ubuntu)

對於 Mac 和 Ubuntu (Linux):

  1. 打開終端機。
  2. 使用文字編輯器開啟~/.ssh/known_hosts檔案:
     nano ~/.ssh/known_hosts
  3. 搜尋與遠端伺服器的主機名稱或 IP 位址對應的行。
  4. 刪除包含舊主機金鑰的行。
  5. 儲存檔案並關閉文字編輯器。
  6. 使用 SSH 重新連接到伺服器:
     ssh <username>@<hostname>

自動刪除(Mac 和 Ubuntu):

您可以使用下列命令自動刪除舊主機金鑰,而不是手動編輯known_hosts檔案:

 ssh-keygen -R <hostname or IP>

對於 Windows(使用 PuTTY):

  1. 打開膩子
  2. Windows + R ,輸入regedit ,然後按 Enter。
  3. 導覽至登錄路徑:
     HKEY_CURRENT_USER\Software\Myusername\PuTTY\SshHostKeys
  4. 尋找與遠端伺服器的主機名稱或 IP 位址關聯的項目。
  5. 右鍵單擊該條目並選擇刪除
  6. 在 PuTTY 中重新連接到伺服器,它會提示您接受新密鑰。

對於 Windows(使用 Git Bash):

  1. 打開Git Bash
  2. 運行以下命令:
     ssh-keygen -R <hostname>
  3. 下次連線時,SSH 將提示您接受新金鑰。

解決方案 2:清除整個known_hosts檔案(Windows、Mac、Ubuntu)

對於 Mac 和 Ubuntu (Linux):

  1. 打開終端機。
  2. 執行以下命令刪除整個known_hosts檔案:
     rm ~/.ssh/known_hosts
  3. 使用 SSH 重新連線到遠端伺服器:
     ssh <username>@<hostname>

對於 Windows(使用 PuTTY):

  1. 打開膩子
  2. Windows + R ,鍵入regedit ,然後按 Enter 鍵開啟登錄編輯程式
  3. 導航至:
     HKEY_CURRENT_USER\Software\SimonTatham\PuTTY\SshHostKeys
  4. 右鍵單擊SshHostKeys資料夾並選擇“刪除” 。這將刪除所有儲存的主機金鑰。
  5. 使用 PuTTY 重新連線到伺服器,系統將提示您接受新的主機金鑰。

對於 Windows(使用 Git Bash):

  1. 打開Git Bash
  2. 透過執行以下命令刪除known_hosts檔案:
     rm ~/.ssh/known_hosts
  3. 當您使用 SSH 重新連線到伺服器時,系統會提示您接受新的主機金鑰。

解決方案 3:暫時忽略主機金鑰檢查(Windows、Mac、Ubuntu)

如果您需要快速連接到伺服器並且沒有時間手動刪除舊的主機金鑰,您可以暫時繞過主機金鑰驗證。雖然此方法在緊急情況下有效,但不建議經常使用,因為它可能會讓您面臨潛在的安全風險。

對於 Mac 和 Ubuntu (Linux):

 ssh -o StrictHostKeyChecking=no <username>@<hostname>

對於 Windows(使用 Git Bash):

 ssh -o StrictHostKeyChecking=no <username>@<hostname>

對於 Windows(使用 PuTTY):

  1. 打開膩子
  2. 導覽至連線 > SSH > 主機金鑰
  3. 透過選擇始終接受停用主機金鑰檢查。
  4. 重新連線到伺服器而不驗證主機金鑰。

解決方案 4:手動新增新的主機金鑰(Windows、Mac、Ubuntu)

對於 Mac 和 Ubuntu (Linux):

 ssh-keyscan -H <hostname> >> ~/.ssh/known_hosts

對於 Windows(使用 Git Bash):

 ssh-keyscan -H <hostname> >> ~/.ssh/known_hosts

對於 Windows(使用 PuTTY):

不幸的是,PuTTY 沒有ssh-keyscan的直接等效項。要手動新增主機金鑰,您需要連接到伺服器並允許 PuTTY 提示您輸入新的主機金鑰。

解決方案 5:檢查 DNS 或 IP 位址變更(Windows、Mac、Ubuntu)

對於 Mac 和 Ubuntu (Linux):

 nslookup <hostname>
 dig <hostname>

對於 Windows(使用 Git Bash):

 nslookup <hostname>
 dig <hostname>

對於 Windows(使用 PuTTY):

  1. 開啟命令提示字元PowerShell
  2. 使用下列命令檢查 DNS 或 IP 位址:
     nslookup <hostname>
  3. 將輸出中的 IP 位址與 PuTTY 在登錄中顯示的 IP 位址進行比較。
  4. 如果 IP 位址已更改,請導覽至以下位置,從 PuTTY 註冊表中刪除舊主機金鑰:
     HKEY_CURRENT_USER\Software\SimonTatham\PuTTY\SshHostKeys
  5. 透過 PuTTY 重新連接,它會提示您接受新密鑰。

未來避免此問題的最佳實務(Windows、Mac、Ubuntu)

  • 使用靜態 IP 位址:使用靜態 IP 位址設定伺服器,以防止可能觸發警告的意外變更。
  • 定期清理或更新known_hosts定期檢查和清理舊的或過時的主機金鑰。
  • 考慮使用 SSH 憑證:使用 SSH 憑證進行可擴展的主機金鑰管理,減少此警告的可能性。
  • 監視 DNS 或 IP 更改:密切注意 DNS 記錄或 IP 位址的更改,並相應地更新known_hosts

結論

“遠端主機識別已更改!”警告是 SSH 中的重要安全功能,它透過驗證遠端伺服器的身份來防止未經授權的存取。雖然這可能令人擔憂,但在進行任何更改之前採取必要的步驟來驗證伺服器的身份非常重要。

透過使用本文中概述的解決方案,無論您使用的是WindowsMac還是Ubuntu ,您都可以安全地解決該警告。請務必記住首先驗證伺服器的真實性,然後選擇最適合您情況的解決方案,無論是刪除舊主機金鑰、清除known_hosts檔案還是暫時繞過檢查。

此外,遵循使用靜態 IP 位址、定期更新known_hosts和考慮 SSH 憑證等最佳實踐有助於最大限度地減少將來出現此問題的可能性。