當多個主機共用相同的 IP 和 DNS 名稱時如何編輯known_hosts?

當多個主機共用相同的 IP 和 DNS 名稱時如何編輯known_hosts?

我定期透過 ssh 連線到一台雙啟動 OS X / Linux 電腦。這兩個作業系統執行個體不共用相同的主機金鑰,因此可以將它們視為共用相同 IP 和 DNS 的兩個主機。假設 IP 是192.168.0.9,名稱是hostnamehostname.domainname

據我了解,能夠連接到兩個主機的解決方案是將它們都添加到文件中~/.ssh/know_hosts。然而,說起來容易做起來難,因為檔案是散列的,而且每個主機可能有多個條目(192.168.0.9, hostname, hostname.domainname)。因此,我收到以下警告

Warning: the ECDSA host key for 'hostname' differs from the key for the IP address '192.168.0.9'

有沒有一種簡單的方法來編輯known_hosts文件,同時保留哈希值。例如,如何找到與給定主機對應的行?如何為某些已知主機產生雜湊值?

理想的解決方案將允許我使用 ssh 無縫連接到這台計算機,無論我是否將其稱為192.168.0.9hostnamehostname.domainname,也無論它使用其 Linux 主機密鑰還是 OSX 主機密鑰。但是,如果存在真正的中間人攻擊,我仍然希望收到警告,IE如果使用這兩個之外的另一個密鑰。

答案1

這裡最直接的解決方案是對 Linux 和 OS X 使用相同的主機金鑰/etc/ssh/ssh_host_*_key*。然後,無論您啟動到哪個作業系統,都會向 SSH 用戶端提供相同的主機金鑰,而 SSH 用戶端將一無所知。

答案2

正如@Izzy 在上面的評論中建議的那樣, ssh 告訴您有問題的行,並通過刪除該行(將其保存在其他地方),接受新密鑰,然後將刪除的行複製回來,您最終會得到相同的兩個金鑰host 和 ssh 都會接受。

(您也可以使用ssh-keygen -H -F <hostname>在known_hosts檔案中尋找與該主機名稱相符的行。將刪除的行複製回來後執行此命令應該會列出兩個項目。)

如果有人知道如何讓 PuTTY 做同樣的事情,我會很想聽聽。

答案3

我發現這可能會幫助您實現您想要實現的目標。

來源:https://stackoverflow.com/questions/733753/how-to-handle-ssh-host-key-verification-with-2- Different-hosts-on-the-same-but

在 .ssh 目錄中建立一個設定文件,如下所示:

Host server1
  Hostname x1.example.com
  HostKeyAlias server1
  CheckHostIP no
  Port 22001
  User karl

Host server2
  Hostname x2.example.com
  HostKeyAlias server2
  CheckHostIP no
  Port 22002
  User karl

下面的解釋(來自 man ssh_config)

檢查主機IP

如果此標誌設定為“yes”,ssh(1) 將另外檢查known_hosts 檔案中的主機IP 位址。這允許 ssh 偵測主機金鑰是否由於 DNS 欺騙而更改。如果該選項設為“否”,則不會執行檢查。預設為“是”。

主機密鑰別名

指定在主機密鑰資料庫檔案中尋找或儲存主機密鑰時應使用的別名,而不是真實主機名稱。此選項對於隧道 SSH 連線或在單一主機上執行的多個伺服器非常有用。

使用者名稱和連接埠行也避免了您必須在命令列上提供這些選項,因此您只需使用:

% ssh server1
% ssh server2

答案4

當連接到共享相同IP 的各個VPS 機器時,我不會遇到這個問題,因為每個VPS 機器都有不同的SSH 連接埠(20022、30022 等),因此它們被註冊為具有不同金鑰的已知主機。

這對你來說是一個解決方法嗎?

相關內容