如果我 ssh 到我的远程 OpenWrt 路由器 [“通过 DynDNS”]
我收到消息
@ WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! @
好的,我删除旧行
~/.ssh/known_hosts
,添加新行但我的密码未被接受(即使我复制并粘贴了正确的密码)
但是:如果有人重新启动远程路由器,它会显示:
@ WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! @
好吧,我再次删除 中的行
~/.ssh/known_hosts
,添加新行 [旧行??],然后!我可以登录了!
为什么?
这是因为 dyndns 更新失败,并且我尝试登录到错误的 IP 吗?而且如果重启路由器,dyndns IP就会更新,这样IP就正确了,我就可以登录了?这就是为什么说“主机识别失败”吗?
这已经是第三次了……我不知道到底发生了什么。
答案1
您的理论基本上是正确的,因为您的问题是由 dyndns 引起的。更准确地说,您的问题是由动态 IP 地址引起的; dyndns 让事情变得更容易,但并不完全无缝。
当您的路由器收到新的动态 IP 地址时(因为它重新启动,或者因为您的提供商因任何原因断开了您的连接)[步骤 1,步骤 4],您需要登录到新 IP。当您的路由器连接时,它会向您的 dyndns 提供商发送一条消息,通知其地址更改。当您运行时ssh johnny8888.dyndns.example.com
,ssh 客户端会查找 对应的 IP 地址johnny8888.dyndns.example.com
。
DNS 信息需要一些时间来传播,因为它被大量缓存。对于典型的 dyndns 使用,延迟是几分钟。因此,如果您在 IP 地址更改后立即尝试连接,您可能仍会到达旧的 IP 地址 [步骤 3],该地址现在归属于另一台计算机。如果该计算机运行 ssh 服务器,您会收到远程主机标识已更改警告。
在您的路由器部分下,将其添加CheckHostIP No
到您的~/.ssh/config
。然后 ssh 将不会检查与您的 IP 地址关联的密钥(由于您拥有动态地址,因此这毫无用处),而只会检查与您的主机名关联的密钥(不会更改)。
请注意,大多数时候,您会不是获取远程主机标识更改警告。只有当您尝试登录别人的计算机或过去尝试过时,您才会得到它。 (当您在 IP 地址更改后和 DNS 更新传播之前尝试连接时,您的尝试可能是偶然的。)
1 许多 ISP 每天或每隔几天就会断开每个客户端的连接,因为这有利于负载平衡。您可以立即重新连接,但可能会获得不同的 IP 地址。
答案2
是的,我相信你已经回答了你自己的问题。请参阅上面吉尔斯的回答。
但最重要的是,我建议您的 dyndns 更新更频繁地运行。如果可能的话,最好是在您的 IP 发生变化时立即运行 dyndns 更新,但我不确定 openwrt 是否提供此功能。