SSH到同一个公共IP地址的NAT'd服务器

我试图从办公室X中的SSH到办公室Y中的几个Linux盒子。办公室Y中的Linux盒子在NAT后面,每个在自己的端口上运行。 我可以通过SSH成功​​地到达所有这些服务器,但是我无法进行身份validation。

我能够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地址后面的每台服务器上创build/接受不同的密钥?

在这里输入图像说明

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

 your.wan.ip.address servera serverb 

然后通过主机名和端口ssh

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

  1. 您可以禁用此特定主机的主机密钥检查。 在您的ssh_config文件( ~/.ssh/config )中,放置如下所示的内容:

     Host remote.host.name UserKnownHostsFile /dev/null StrictHostkeyChecking no 

    这个configurationssh永远不会为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 hostassh hostb连接到这些主机, ssh hosta将从configuration文件中获取实际的主机名和端口。

你不会说你正在使用哪个版本的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 

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

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

hostb类似