将主机(例如github)安全地添加到SSH known_hosts文件中?

如何安全地将主机密钥添加到SSH known_hosts文件中?

我正在设置一个开发机器,并且我想(例如)当我使用SSH从github.com克隆一个仓库时,阻止git提示。

我知道我可以使用StrictHostKeyChecking=no (例如这个答案 ),但这不是安全的。

到目前为止,我发现…

  1. Github发布他们的SSH密钥指纹https://help.github.com/articles/github-s-ssh-key-fingerprints/

  2. 我可以使用ssh-keyscan来获取github.com的主机密钥。

我如何结合这些事实? 给定一个预先填充的指纹列表,如何validationssh-keyscan的输出可以添加到known_hosts文件中?


我想我在问:

如何获得由ssh-keyscan返回的密钥的指纹?

假设我已经为了SSH而进行了MITM编辑,但是我可以信任github HTTPS页面(因为它有一个有效的证书链)。

这意味着我有一些(可疑的)SSH主机密钥(来自ssh-keyscan )和一些(可信的)密钥指纹。 我如何validation一个对另一个?


相关:如何散列ssh-keyscan输出的主机部分? 或者我可以在已知主机中混合散列/非散列主机?

最简单的方法是使用ssh-keyscan手动获取密钥,手动validation它们:

 $ ssh-keyscan -t rsa github.com | ssh-keygen -lf - # github.com:22 SSH-2.0-libssh-0.7.0 2048 SHA256:nThbg6kXUpJWGl7E1IGOCspRomTxdCARLviKw6E5SY8 github.com (RSA) 

然后将它们添加到您的脚本中,然后运行“权威”公钥。

您可以在known_hosts文件中混合散列/非散列条目。

所以如果你想添加github键,你可以这样做:

ssh-keyscan github.com >> ~/.ssh/known_hosts

如果你想要哈希,添加-H

ssh-keyscan -H github.com >> ~/.ssh/known_hosts