21

我在 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 更改的情况下)。

我正在犹豫是否要关闭密钥验证,因为这样会不太安全。但是一直收到警告也是不安全的(因为那时我一直忽略此类警告)。有更好的解决方案吗?

这与我的旧问题有关,但不一样:

具有 2 个 DNS 名称的服务器上的 SSH 登录警告消息

4

1 回答 1

40

我认为这会起作用:

在您的目录中创建一个config文件,.ssh如下所示:

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 连接或在单个主机上运行的多个服务器很有用。

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

% ssh server1
% ssh server2
于 2009-04-09T11:28:01.400 回答