
我定期透過 ssh 連線到一台雙啟動 OS X / Linux 電腦。這兩個作業系統執行個體不共用相同的主機金鑰,因此可以將它們視為共用相同 IP 和 DNS 的兩個主機。假設 IP 是192.168.0.9
,名稱是hostname
和hostname.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.9
、hostname
或hostname.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
我發現這可能會幫助您實現您想要實現的目標。
在 .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 等),因此它們被註冊為具有不同金鑰的已知主機。
這對你來說是一個解決方法嗎?