我想在脚本中实现一个函数,该函数检查与 known_hosts 文件中给定主机对应的密钥是否正确。显而易见的方法是尝试 ssh 连接并解析它是否会导致 known_hosts 警告。由于以下原因,这是次优的:
- 如果主机不在know_hosts 文件中,则需要单独检查
- 它依赖于可能会更改的警告的特定措辞
- 它在您不需要运行的目标服务器上为您运行一个 ssh 命令,并且可能由于不同的原因(例如指定的登录 shell)而失败
- 需要有效的凭据
我试图找到可能用于该检查的选项ssh-keyscan
和ssh-keygen
命令,但没有找到它们。
进行此检查的最简单方法是什么?
如果您有所有可用主机的列表,则可以使用以下内容:
这将生成一个新的
known_hosts_revised
,您可以使用它与 current 进行差异know_hosts
以查看差异。hosts_list
内容应该是这样的:我在 Windows 10 下,我可以通过发出以下命令来获取保存的 SSH 密钥:
ssh-keygen -F sdf.org
获得以下输出
使用以下命令,我可以获得当前的SSH 密钥:
ssh-keyscan -t ed25519 sdf.org
获得输出
我可以直观地比较这两个值,以确保 SSH 密钥是正确的。我敢打赌它也可以在批处理文件中完成(但我不知道如何)