如何在同一(但正在更改)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 很有用 连接或在单个主机上运行的多个服务器。

UsernamePort 行避免了您也必须在命令行上提供这些选项,因此您可以使用:

% ssh server1
% ssh server2

【讨论】:

这太酷了!效果很好,谢谢! 只是想知道:有没有办法让 ssh 将 IP 和端口存储在 known_hosts 中? IIUC,这可以防止 DNS 欺骗,对吧? @Hbf 在我的 MacOS X 系统上,端口(如果非标准)存储在known_hosts 不确定这是否是最近的发展,但至少从 v5.9 开始,OpenSSH 将 host:22001host:22002 识别为两个独立的主机;因此,没有警告“远程主机密钥已更改”。 继续允许欺骗检测的一种方法是在服务器配置条目中为同一 IP 上的每个端口指定不同的 UserKnownHosts 文件。

以上是关于如何在同一(但正在更改)IP 地址上处理 2 个不同主机的 ssh 主机密钥验证? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

两个django项目在同一个ip地址(服务器)

如何更改 Wildfly 服务器的 IP 地址

如何判断一个ip地址属于哪个网段?

如何跨 IP 地址共享数据

如何在 python 中更改 IP 地址时可视化它们?

如何更改 Raspbian PI 4 上无线连接的静态 IP 地址? [关闭]