从 2 个具有相同主机名的不同服务器通过 SSH 连接到 1 个服务器

从 2 个具有相同主机名的不同服务器通过 SSH 连接到 1 个服务器

有 2 台服务器用于生产和 DR。两台服务器都是 RHEL 7 且规格相同。

两者都有相同的主机名和不同的 IP 地址。我们需要通过 SSH 无需密码即可连接到相同的外部服务器。

当我们尝试从 DR 服务器连接时,它会显示如下警告消息。

权限被拒绝(publickey、gssapi-keyex、gssapi-with-mic、keyboard-interactive)。
来自服务器:用户 1 $ ssh 用户 2@目标服务器
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ 警告:可能检测到 DNS 欺骗!@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
目标服务器的 ECDSA 主机密钥已更改,
以及对应 IP 地址 10.126.**.** 的密钥
不变。这可能意味着
正在发生 DNS 欺骗或主机的 IP 地址
及其主机密钥同时发生变化。
/home/user1/.ssh/known_hosts:111 中的 IP 密钥存在问题
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ 警告:远程主机标识已更改!@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
可能有人正在做一些恶意的事情!
现在可能有人正在窃听您(中间​​人攻击)!
主机密钥也可能刚刚被更改。
远程主机发送的 ECDSA 密钥的指纹是
SHA256:****************************************************。
请联系您的系统管理员。
在 /home/user1/.ssh/known_hosts 中添加正确的主机密钥以摆脱此消息。
在 /home/user1/.ssh/known_hosts:111 中输入违规 ED25519 密钥
禁用密码验证以避免中间人攻击。
禁用键盘交互式身份验证以避免中间人攻击。
*********************************************************************

我的问题是如何避免出现此消息并启用无密码 ssh 登录。是否有可能避免出现此消息?

答案1

虽然其他人建议您不要使用相同的主机名(我同意他们的观点),但他们并没有提出解决方案。

实际的解决方案是禁用 StrictHostKeyChecking。

为了做到这一点,你可以直接通过 ssh 进入服务器:

ssh -o StrictHostKeyChecking=no <username>@<hostname>

如果您使用 ssh 配置文件那么它将看起来像这样:

Host <name>
User <username>
Hostname <hostname>
 StrictHostKeyChecking no
 UserKnownHostsFile=/dev/null

UserKnownHostsFile=/dev/null将确保您的密钥不会被保存。

答案2

在 DNS 中为包括 ssh 在内的管理功能设置不同的主机名。举我自己的例子,thingprod1.example.netthingprod2.example.netthingprod.example.net 作为指向主动端的服务地址。系统管理员使用主机名,用户应用程序使用服务地址。

ssh 的 DNS 欺骗和主机密钥更改警告是检测 ssh 流量拦截的安全功能。它们依赖于主机密钥对于名称和 IP 保持不变。

相关内容