Linux

通過 SSH 連接到同一公共 IP 地址上的 NAT 伺服器

  • September 3, 2015

我正在嘗試從 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通過主機名和埠。

有幾種方法可以解決這個問題:

  1. 您可以禁用此特定主機的主機密鑰檢查。在您的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從配置文件中獲取實際的主機名和埠。

引用自:https://serverfault.com/questions/717624