通过 SSH 连接到同一公共 IP 地址上的 NAT 服务器

通过 SSH 连接到同一公共 IP 地址上的 NAT 服务器

我正在尝试通过 SSH 从办公室 X 连接到办公室 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 地址后面的每个服务器创建/接受不同的密钥?

在此处输入图片描述

答案1

主机名或 IP 地址将以哈希形式(或以纯文本形式,具体取决于选项和版本默认值)存储在文件中known_hosts。最简单的解决方法是将每个主机的条目添加到 DNS 或/etc/hosts(呃!)具有相同 IP(WAN)地址的文件,例如/etc/hosts

your.wan.ip.address      servera serverb

然后ssh按主机名和端口。

答案2

有几种方法可以解决这个问题:

  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然后您将使用或连接到这些主机ssh hostb,并ssh从配置文件中获取实际的主机名和端口。

答案3

您没有说您正在使用哪个版本的 Solaris(更重要的是 SSH),但足够更新的 OpenSSH 版本已经解决了这个问题。

这是我的known_hosts文件中的两个条目,它们具有相同的 IP 地址但不同的端口号(一个是隐含的 22);如您所见,存储的密钥并不相同。

[10.69.55.47]:2222 ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAo+zenWwhFWAa/exdxbm3A3htDFGwFVjFlHLO83AfOaloBbBrr6whmLeDqVPBSwI/yrePClpahLUMYE6qGBFCbbOYiQkMDwacNFfxvxd6oCMDDqZH6NWGiBCt0b2M6YKYhYCw6z8n0yvlLk1eTdpp2OpjbfwAIe4eBkWyKNZY9+17VtzARqGR9tgHC8Dh7HBApDR8wooc+XzY6FhD2b21meIt8r8bjfBIu5t6eQgDHh/TzUT1rGH6W0HeUJxpDnpud5Af1ygMEQFrGrzHi5HKtg+K6HFBggMF8t6p2Dz8oMds5pi6IuPlVi3UvO1X7mMJ9pP7ByMQqiVrQ9wtAbC2QQ==
10.69.55.47 ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEA1clJ6vp8NDy7D9YVgAKQQzERfx3scR0c0027yOYGGpeLg+nW+x8mJk1ia9GouUTDME+NP2YDVZUEDog9rtTJvuLd22ZxfoC8LGboyBsmlhOVxdSCxmA/+blPCp1pyocr8pXyXjSkb/qQKKQMRoAU7qKKHPfI5Vugj04l6WbW2rJQTqFD/Lguc8AAUOE6K4DNhETOH2gOnwq6xi0vutDmeUKSqEvM/PQFZSlOL4dFDYO5jAUjvgm6yGHP3LlS9fmCzayJgGgLSnNz0nlcd94Pa1Cd441cCAZHFDvDPniawEafH9ok4Mmew0UGopQGUGbfb5+8g8YphLW6aLdrvnZbAw==

我不知道哪个版本的 OpenSSH 引入了此功能,但我正在运行

[me@risby fin]$ ssh -V
OpenSSH_6.9p1, OpenSSL 1.0.1k-fips 8 Jan 2015

答案4

为了扩展我对@larsks 回答的评论,我认为使用~/.ssh/config条目比修改 /etc/hosts 要好得多,尽管我会使用HostKeyAlias而不是将已知主机拆分到不同的文件中。例如:

Host hosta
Port 10098
Hostname remote.host.name
HostKeyAlias hosta

同样地hostb

相关内容