有没有一种方法可以保持严格的主机密钥检查行为,但只检查服务器的密钥指纹(这实际上已经是主机的唯一身份),而不考虑主机名/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选项来进行严格的主机密钥检查,而不仅仅是“是”和“否”,但我只是不知道我现在是否有这个选项,尤其是因为那意味着我必须要么设法将其合并到上游或自己从源代码构建 OpenSSH 版本以用于更多设备。
我很想编写一个本地服务来跟踪已知的主机密钥ssh,并创建一个命名的 Unix 域套接字,ssh然后可以将其用作已知的主机文件而不是普通的纯文本文件。这似乎是可行的,但需要一些注意才能正确和健壮。
显然,关闭严格的主机密钥检查是不可选项。如果我打算这样做,我最好rsh不要假装还剩下任何安全措施。我们不是动物。
所以我希望有一些聪明的方法可以对 OpenSSH 的主机密钥检查行为进行这种调整,以忽略主机名 IP 并只检查开箱即用的密钥。
手动修改或添加名称/IP 字段设置为 的 每个主机密钥的已知主机条目*。
事实证明,OpenSSH 的已知主机文件格式有两个鲜为人知的细节(由于某种原因记录在sshd手册页中,而不是ssh手册页中的SSH_KNOWN_HOSTS_FILE_FORMAT部分),它们准确地给出了我想要的行为:
OpenSSH 允许在主机名/IP 字段中使用通配符,以便多个(甚至所有)主机匹配给定的公钥。
OpenSSH 允许同一主机有多个已知主机条目,并检查所有这些条目,以便可以认为多个主机密钥对于同一主机有效。
将这两件事结合起来,您可以添加任意数量的主机密钥,这些主机密钥被认为对您连接到的任何主机都有效,同时仍然利用严格的主机密钥检查。
无论您是否HashKnownHosts打开或关闭,这都有效 - 如果您正在修改现有的散列条目,您仍然只需替换条目中的第一个(空格分隔)字段。如果您运行,ssh-keygen -H您确实会收到一条警告,指出通配符条目无法进行哈希处理,但这没关系:哈希处理的全部目的是隐藏您连接到的主机,以防文件内容暴露,但通配符同样不会*显示特定主机。
我在问题中说根本没有安全损失是错误的。存在一个小但真实的额外风险:如果一个或多个主机密钥被认为对多个主机有效,那么如果这些主机密钥中的任何一个被泄露,您的所有连接都可能被泄露的密钥进行中间人攻击。
对于某些人来说,这将是一个可以接受的风险,在通常的便利与安全权衡中值得额外的便利。
但是,只需进行一点额外的设置,就可以通过为每个“漫游”主机提供一个已知的主机文件,仅存储该主机的通配符主机密钥条目,以及每个指定该主机的配置文件,将这种情况减轻到相当轻松的水平。使用 file 选项指定已知的主机文件UserKnownHosts,并在连接时使用该选项指定该配置文件-F。
| 归档时间: |
|
| 查看次数: |
1789 次 |
| 最近记录: |