SSH进入具有相同公共IP地址的NAT服务器


16

我正在尝试从Office X中的SSH到Office Y中的几个Linux机器。OfficeY中的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
+1为手绘云。
JoeG

Answers:


15

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

your.wan.ip.address      servera serverb

然后ssh按主机名和端口。


22

有几种解决方法:

  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从配置文件中获取实际的主机名和端口。


4
不,修改/etc/hosts文件也可以。我更喜欢这样做,因为(a)不需要升级的特权,并且(b)意味着您不需要在命令行上指定端口号。
larsk

1
在这两个解决方案中,仍需要名称解析(主机或DNS),以便将hosta和hostb与WAN IP地址相关联。但是这两个都是很好的建议,我懒得在LOL Edit中键入:刚注意到那里的主机名-涉及名称解析。
布兰登·泽维尔

2
@CopyRunStart:您不需要在命令行上指定端口,因为它已经在您的~/.ssh/config(每个端口都有一个不同的端口hosta hostb)中指定,如larsks的答案所述。同样,您可以在此配置文件中为不同的主机指定不同的用户名,密钥等,因此您在命令行上要做的全部就是ssh hostassh hostb
arielf 2015年

3
如果我可以两次投票〜/ .ssh / config,我会的。摆弄/ etc / hosts必然会导致其他故障排除问题。
亚伦

1
IMO,这是比修改/ etc / hosts更好的解决方案。作为一个小问题,我将使用HostKeyAlias指令而不是将已知主机拆分为不同的文件。例如HostKeyAlias hosta
深红色的白鹭

8

您没有说您使用的是哪个版本的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

3

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

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

和类似的 hostb

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.