我正在尝试通过 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
有几种方法可以解决这个问题:
您可以禁用此特定主机的主机密钥检查。在您的
ssh_config
文件 (~/.ssh/config
) 中,输入以下内容:Host remote.host.name UserKnownHostsFile /dev/null StrictHostkeyChecking no
这配置
ssh
为从不存储主机密钥remote.host.name
,但缺点是现在您容易受到中间人攻击(因为您盲目接受主机密钥,所以您无法判断远程主机密钥是否已更改)。您可以使用类似的技术简单地为每个主机提供一个唯一的
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