有 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.net
和thingprod2.example.net
,thingprod.example.net
作为指向主动端的服务地址。系统管理员使用主机名,用户应用程序使用服务地址。
ssh 的 DNS 欺骗和主机密钥更改警告是检测 ssh 流量拦截的安全功能。它们依赖于主机密钥对于名称和 IP 保持不变。