
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 2018
和OpenSSH_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 檔案。