我需要连接到具有动态 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)?
是否可以将主机公钥传递给 SSH,以便:
- SSH 自动验证主机的真实性
- 主机密钥未存储在known_hosts文件中
这个问题不同于如何避免 SSH 对已知主机进行主机验证?因为其他问题的目的是抑制 SSH 验证,而我不是想压制它:我做想要对主机进行身份验证,只使用主机的公钥(我知道,并将其存储在文件中)而不是 SSHknown_hosts
文件。
对我来说,另一个问题似乎是每次都连接到不同的服务器,而不是连接到具有动态 IP 的单个知名服务器。
答案1
我能找到的最佳解决方案(即最接近我想要的解决方案)是使用该选项HostKeyAlias
:它将使用我指定访问的主机名known_hosts
(而不是我正在连接的 IP)。
我需要known_hosts
使用给定的主机名(例如myhost
:)添加主机的公钥,然后使用以下命令连接到它:
ssh -o 'HostKeyAlias myhost' ...
答案2
该known_hosts
文件不仅仅是密钥,它还包含您用于连接的主机名,以及(如果可能)对应的 IP。这就是您看到错误的原因,它正在将从服务器获取的三元组与您存储在 known_hosts 文件中的内容进行比较。
因此,如果 IP 不断变化,您可以禁用它CheckHostIP
,这意味着它只会检查主机名和主机密钥。如果这些保持不变,您应该不会有太多抱怨,但如果有人劫持您的 DNS,您将面临风险。