有没有一种方法可以保持严格的主机密钥检查行为,但只检查服务器的密钥指纹(这实际上已经是主机的唯一身份),而不考虑主机名/IP?
我有几个个人移动/漫游设备:电话、笔记本电脑、更多用作袖珍电脑的电话等,我经常在它们之间使用 SSH,使用 IP 地址而不是主机名。
每当我最终使用新网络(通常是某人的家庭/办公室/公共 WiFi)或现有网络上的 DHCP 租约到期时,这些设备的 IP 地址都会乱码,导致以下一种或两种情况:
在同一主机与不变的主机密钥是在不同的位置-这样ssh的提示我确认同一主机密钥再次为新的IP。
新主机最终与之前连接的主机使用相同的 IP(但之前的主机现在还在不同的 IP 上处于活动状态) - 因此,当尝试连接到新主机时,ssh会将其视为众所周知的错误阻止连接,解决这个问题需要我使用配置选项管理多个已知主机文件,或者丢失以前主机的已知主机密钥关联。
我想要某种方式来保持自动主机密钥检查,但在我的用例中,将主机名/IP 与服务器本身相关联是没有意义的,因此:
显示为不同名称/IP 的相同主机密钥应被自动接受为已知主机。
先前已知 IP 地址上的不同主机密钥应该只会导致新密钥的“是/否”对话框。
换句话说,我想known_hosts被检查,就好像它只是一个已知键的列表,而不是一个已知名称(/IP)<-> 键元组的列表。
只是先占这个切线:
如果我可以让 SSH 忽略主机名/IP 并决定密钥是新的还是已知的,那么不会有真正的安全损失,因为服务器的主机密钥已经和我们一样安全了服务器的唯一标识符无论该服务器当前处于什么名称/IP,都可以获取。
中间人事件的唯一区别是我会得到是/否提示而不是连接顽固地中止,但同样我会立即知道出了什么问题,因为我将连接到主机密钥的设备我期待被人知道。
DNS 不适用,因为我们谈论的是在不同网络之间切换,通常是 LAN 私有 IP 地址等。
/etc/hosts 考虑到我可能经常更换网络,调整只是一种痛苦。
我不使用像 mDNS/ZeroConf/Bonjour 这样的自动发现/自我广告技术,因为它们为这些小型设备中的一些添加了不可忽视的设置、维护和安全审计的复杂性(在其中一些我必须编译我想从源代码使用),而且我通常不喜欢我的设备积极并不断地向整个网络宣传自己。
我目前使用的一个手动式非解决方案至少可以减轻known_hosts痛苦,即强制 ssh/dev/null用作已知主机文件 - 这意味着我每次都会收到提示验证密钥。但即使有我良好的记忆力和 ASCII 键艺术的帮助,这也不会扩展和破坏自动化,而且我一直在逃避它,因为现在起作用的键数量非常少。
我可以修补ssh以允许一个KeyOnly …