如何在同一(但正在更改)IP 地址上处理 2 个不同主机的 ssh 主机密钥验证? [关闭]
Posted
技术标签:
【中文标题】如何在同一(但正在更改)IP 地址上处理 2 个不同主机的 ssh 主机密钥验证? [关闭]【英文标题】:How to handle ssh host key verification with 2 different hosts on the same (but changing) IP address? [closed] 【发布时间】:2010-10-18 12:55:48 【问题描述】:我在 nat 防火墙后面有 2 个 ssh 服务器,位于每天更改其 wan IP 的位置。它们在给定的时间总是在同一个 WAN IP 地址,但在不同的端口上。
我以这种方式连接到服务器 A:
ssh -p 22001 karl@x1.example.com
到服务器 B:
ssh -p 22002 karl@x2.example.com
所以我为同一个 IP 获得了 2 个不同的主机密钥,并且当 IP 更改时,甚至同一主机的不同 IP 也是如此。
我必须一遍又一遍地删除 known_hosts 文件中的另一个密钥或旧密钥(以防 IP 更改)。
我正在犹豫是否要关闭密钥验证,因为这样会不太安全。但是一直收到警告也是不安全的(因为那时我一直忽略此类警告)。有没有更好的解决方案?
这与我在这里的旧问题有关,但不一样:
SSH login warning message on a server with 2 DNS names
【问题讨论】:
为什么关闭而不是转到SuperUser 或Unix & Linux? 【参考方案1】:我认为这会奏效:
在您的.ssh
目录中创建一个config
文件,如下所示:
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
如果此标志设置为 “是”,ssh(1) 将另外检查 known_hosts 中的主机 IP 地址 文件。这允许 ssh 检测是否存在 由于 DNS 欺骗,主机密钥已更改。 如果该选项设置为“否”,则 不会执行检查。这 默认为“是”。
HostKeyAlias
指定应该使用的别名而不是真实的 在主机密钥中查找或保存主机密钥时的主机名 数据库文件。此选项对于隧道 SSH 很有用 连接或在单个主机上运行的多个服务器。
Username
和 Port
行避免了您也必须在命令行上提供这些选项,因此您可以使用:
% ssh server1
% ssh server2
【讨论】:
这太酷了!效果很好,谢谢! 只是想知道:有没有办法让 ssh 将 IP 和端口存储在 known_hosts 中? IIUC,这可以防止 DNS 欺骗,对吧? @Hbf 在我的 MacOS X 系统上,端口(如果非标准)存储在known_hosts
。
不确定这是否是最近的发展,但至少从 v5.9 开始,OpenSSH 将 host:22001
和 host:22002
识别为两个独立的主机;因此,没有警告“远程主机密钥已更改”。
继续允许欺骗检测的一种方法是在服务器配置条目中为同一 IP 上的每个端口指定不同的 UserKnownHosts 文件。以上是关于如何在同一(但正在更改)IP 地址上处理 2 个不同主机的 ssh 主机密钥验证? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章