我经常 ssh 进入一台双启动 OS X / Linux 计算机。两个 OS 实例不共享相同的主机密钥,因此可以将它们视为共享相同 IP 和 DNS 的两个主机。假设 IP 是192.168.0.9,名称是hostname和hostname.domainname
据我了解,能够连接到两个主机的解决方案是将它们都添加到~/.ssh/know_hosts文件中。然而,说起来容易做起来难,因为文件是散列的,并且每个主机可能有几个条目 ( 192.168.0.9, hostname, hostname.domainname)。因此,我有以下警告
Warning: the ECDSA host key for 'hostname' differs from the key for the IP address '192.168.0.9'
Run Code Online (Sandbox Code Playgroud)
有没有一种简单的方法来编辑known_hosts文件,同时保留散列。例如,如何找到与给定主机对应的行?如何为某些已知主机生成哈希?
理想的解决方案将允许我使用ssh连接无缝到这台计算机,无论是否我把它192.168.0.9,hostname或者hostname.domainname,也如果它使用它的Linux hostkey或其OSX hostkey。但是,如果存在真正的中间人攻击,即是否使用了除这两个之外的其他密钥,我仍然希望收到警告。
小智 28
正如@Izzy 在上面的评论中建议的那样,ssh 会告诉您有问题的行,然后通过删除该行(将其保存在别处),接受新密钥,然后将删除的行复制回来,您最终会得到两个相同的密钥主机,ssh 将接受。
(您还可以使用ssh-keygen -H -F <hostname>在 known_hosts 文件中查找与该主机名匹配的行。在将删除的行复制回来后运行它应该列出两个条目。)
如果有人知道如何让 PuTTY 做同样的事情,我会非常有兴趣听到它。
小智 16
我发现这可以帮助您实现您想要实现的目标。
来源:https : //stackoverflow.com/questions/733753/how-to-handle-ssh-host-key-verification-with-2-different-hosts-on-the-same-but
在 .ssh 目录中创建一个配置文件,如下所示:
Run Code Online (Sandbox Code Playgroud)Host server1 Hostname x1.example.com HostKeyAlias server1 CheckHostIP no Port 22001 User karl Host server2 Hostname x2.example.com HostKeyAlias server2 CheckHostIP no Port 22002 User karl下面的解释(来自 man ssh_config)
检查主机IP
如果此标志设置为“yes”,ssh(1) 将另外检查 known_hosts 文件中的主机 IP 地址。这允许 ssh 检测主机密钥是否因 DNS 欺骗而更改。如果该选项设置为“no”,则不会执行检查。默认值为“是”。
主机密钥别名
指定在主机密钥数据库文件中查找或保存主机密钥时应使用的别名而不是真实主机名。此选项对于隧道 SSH 连接或在单个主机上运行的多个服务器很有用。
用户名和端口行也避免了您必须在命令行上提供这些选项,因此您只需使用:
Run Code Online (Sandbox Code Playgroud)% ssh server1 % ssh server2
jjl*_*lin 16
这里最直接的解决方案是为 Linux 和 OS X 使用相同的主机密钥。也就是说,选择一组/etc/ssh/ssh_host_*_key*文件并将它们复制到另一个操作系统。然后,无论您启动哪个操作系统,都会向 SSH 客户端提供相同的主机密钥,而 SSH 客户端也不会更聪明。
| 归档时间: |
|
| 查看次数: |
45085 次 |
| 最近记录: |