SSH:具有动态地址的已知主机

peo*_*oro 13 ssh public-key known-hosts

我需要连接到具有动态 IP 地址的主机。

每次 IP 更改时,SSH 都会提示我进行指纹验证:

The authenticity of host '...' can't be established.
RSA key fingerprint is ....
Are you sure you want to continue connecting (yes/no)?
Run Code Online (Sandbox Code Playgroud)

是否可以通过 SSH 传递主机公钥,以便:

  1. SSH 自动验证主机的真实性
  2. 主机密钥未存储在 known_hosts 文件中

这个问题不同于如何避免 SSH 对已知主机的主机验证?因为其他的问题,旨在抑制SSH验证,虽然我并不想抑制它:我想有主机认证,只是用主机的公钥(这是我知道的,并将它存储在文件中),而不是SSHknown_hosts文件。

对我来说,另一个问题似乎是关于每次连接到不同的服务器,而不是连接到具有动态 IP 的单个知名服务器。

peo*_*oro 8

我能找到的最好的解决方案(即最接近我想要的)是使用选项HostKeyAlias:它将使用我指定访问的主机名known_hosts(而不是我要连接的 IP)。

我需要known_hosts使用给定的主机名(例如:)添加主机的公钥myhost,然后使用以下方法连接到它:

ssh -o 'HostKeyAlias myhost' ...
Run Code Online (Sandbox Code Playgroud)


小智 7

known_hosts文件不仅是密钥,还包含用于连接的主机名,如果可能,还包含对应的 IP。这就是您看到错误的原因,它将从服务器获取的三元组与您存储在 known_hosts 文件中的三元组进行比较。

因此,如果 IP 不断变化,您可以禁用CheckHostIP,这意味着它只会检查主机名和主机密钥。如果这些保持不变,您的抱怨应该会减少,但是如果有人劫持了您的 DNS,您将面临风险。