在伺服器端

在伺服器端

ssh客戶端(預設情況下,至少在 Ubuntu 18.04 和 FreeBSD 12 中)始終檢查伺服器的金鑰指紋是否在檔案中known_hosts

我在區域網路中有一台具有雙重引導的主機;兩個作業系統都使用相同的靜態 IP。我想連接ssh兩個都其中,沒有遇到錯誤。

這顯然違反了對 執行的檢查known_hosts:如果我接受一個指紋,它將與主機 IP 相關;當作業系統切換時,指紋發生變化,而IP是相同的,我需要手動刪除它known_hosts才能再次連接。我想要那個指紋,或者另一個,在考慮知識產權時被接受。

有沒有客戶端解決這個問題的方法是什麼?

我正在使用OpenSSH_7.8p1, OpenSSL 1.1.1a-freebsd 20 Nov 2018OpenSSH_7.6p1 Ubuntu-4ubuntu0.3, OpenSSL 1.0.2n 7 Dec 2017

筆記:我不想「不檢查」伺服器的指紋。我只是想知道是否可以將兩個替代指紋(不僅僅是一個)與伺服器的 IP 位址相關聯。

答案1

您的問題是主機密鑰就是這樣,它們是主機的密鑰。每個主機實際上應該只有一個。當然有多種,因為有多種類型的金鑰,但我會避免依賴金鑰類型來為單一主機提供多個可接受的金鑰。

在伺服器端

我的第一個建議是,如果您真的想在客戶端執行此操作,請仔細考慮。您可以將這兩個作業系統視為同一主機,只需將主機金鑰從一個作業系統複製到另一個作業系統即可。

如果從 OpenSSH 複製,/etc/ssh/ssh_host*您可以在其他作業系統上使用它們。儘管它們可能需要一些重新格式化,具體取決於您運行的 SSH 伺服器。


但 ...

請問為什麼您排除了伺服器端解決方案?最簡單的方法不是嘗試讓兩個作業系統使用相同的主機金鑰嗎? ——菲利普‧庫林

@PhilipCouling 部分是為了易於使用:作業系統之一是 Windows。部分原因是不要將金鑰從主機轉移到另一個主機,這種做法有時不被鼓勵。但主要原因是:如果可能的話,我希望在 ssh 用戶端配置中獲得一定程度的靈活性。 – 弓公園

我認為您正在尋找一種將兩個作業系統視為不同主機的方法,即使它們共用 IP 和連接埠號碼。


在客戶端

也許最可靠的方法是為每個作業系統設定主機特定配置。編輯(或建立)~/.ssh/config以新增:

Host windows.dualbootbox
    Hostname 192.168.10.20
    UserKnownHostsFile ~/.ssh/windows.dualbootbox.known_hosts

Host ubuntu.dualbootbox
    Hostname 192.168.10.20
    UserKnownHostsFile ~/.ssh/ubuntu.dualbootbox.known_hosts

您無需指定Hostname每個位址是否Host已解析為 IP。看man ssh_config了解更多配置選項。

透過上述配置,您可以:

ssh [email protected]
ssh [email protected]

答案2

有很多方法可以做到這一點,一種方法是StrictHostKeyChecking no在對主機進行 ssh 時使用,它不會在known_hosts 中建立任何條目。

ssh -o StrictHostKeyChecking=no <ip>

或者

ssh -o UserKnownHostsFile=/dev/null <ip>

或者您可以根據需要更改 .ssh/config 檔案。

相關內容