Linux
通過 SSH 連接到同一公共 IP 地址上的 NAT 伺服器
我正在嘗試從 X 辦公室 SSH 到 Y 辦公室的幾個 Linux 機器。 Y 辦公室的 Linux 機器在 NAT 後面,每個都在自己的埠上執行。我可以通過 SSH 成功訪問所有這些,但我無法進行身份驗證。
我能夠通過 SSH 進入第一個盒子,但是當我到達第二個盒子時,它說:
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @ WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! @ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY! Someone could be eavesdropping on you right now (man-in-the-middle attack)! It is also possible that the RSA host key has just been changed. The fingerprint for the RSA key sent by the remote host is [edited out fingerprint] Please contact your system administrator. Add correct host key in /root/.ssh/known_hosts to get rid of this message. Offending key in /root/.ssh/known_hosts:1
我的理解是,它期望從該公共 IP 地址看到相同的密鑰,但它看到的是不同的密鑰,因為它是不同的 SSH 伺服器。
如何修復它,以便它從同一 IP 地址後面的每個伺服器創建/接受不同的密鑰?
主機名或 IP 地址在文件中儲存為雜湊(或純文字,取決於選項和版本預設值)
known_hosts
。最簡單的解決方法是將每個主機的條目添加到/etc/hosts
具有相同 IP (WAN) 地址的 DNS 或(呃!)文件中,例如/etc/hosts
:your.wan.ip.address servera serverb
然後
ssh
通過主機名和埠。
有幾種方法可以解決這個問題:
- 您可以禁用此特定主機的主機密鑰檢查。在您的
ssh_config
文件 (~/.ssh/config
) 中,輸入如下內容:Host remote.host.name UserKnownHostsFile /dev/null StrictHostkeyChecking no
這配置
ssh
為從不儲存主機密鑰remote.host.name
,但缺點是現在您對中間人攻擊持開放態度(因為您盲目地接受主機密鑰,您無法判斷遠端主機密鑰是否已更改)。 2. 您可以使用類似的技術來簡單地給每個主機一個唯一的known_hosts
文件:Host hosta Port 10098 Hostname remote.host.name UserKnownHostsFile ~/.ssh/known_hosts_hosta Host hostb Port 10099 Hostname remote.host.name UserKnownHostsFile ~/.ssh/known_hosts_hostb
ssh hosta
然後,您將使用or連接到這些主機ssh hostb
,並ssh
從配置文件中獲取實際的主機名和埠。