何时以及如何生成 /etc/ssh/ssh_known_hosts 文件?

何时以及如何生成 /etc/ssh/ssh_known_hosts 文件?

我阅读了以下教程

我确认ssh-keyscan 192.168.1.X扫描并打印全部 公钥服务器/主机的值 - 该输出来自服务器/主机的以下文件

/etc/ssh/ssh_host_ecdsa_key.pub
/etc/ssh/ssh_host_ed25519_key.pub
/etc/ssh/ssh_host_rsa_key.pub

我可以筛选他们可以通过-t以下选项:

  • ssh-keyscan -t key_type 192.168.1.X

其中key_type可以是rsaecdsaed25519,甚至可以混合使用,例如:rsa,ecdsa

例如:

  • ssh-keyscan -t rsa 192.168.1.X

到这里我理解了命令的所有这 2 种变体。我在我的电脑上确认了这种行为

现在,这篇文章的原因是,在对该命令进行研究之后 - 符合:

两者都提到了文件/etc/ssh/ssh_known_hosts,存在

如果ssh_known_hosts文件是在未验证密钥的情况下构建的ssh-keyscan,则用户将容易受到中间人攻击。另一方面,如果安全模型允许这种风险, ssh-keyscan则可以帮助检测篡改的密钥文件或在文件ssh_known_hosts创建后开始的中间人攻击

尚不清楚ssh_known_hosts是否创建/构建自动或使用某些选项,例如-c- 我知道该选项不存在。

嗯,该文件在客户端中不存在——我假设在执行命令之后应该自动生成或创建该文件——该路径和文件名由于某些明确的原因而存在,对吗?——类似于当使用命令并被客户端接受服务器的指纹.ssh/known_hosts时文件是如何创建/更新的ssh username@hostname

答案1

该文件/etc/ssh/ssh_known_hosts通常不存在于典型安装中。它的存在是为了提供一种方式来~/.ssh/known_hosts为系统的所有用户提供等效的版本。它不会自动更新,因为 (a) 大多数用户没有权限修改它,并且 (b) 仅仅因为一个随机用户批准了一个密钥并不意味着该决定应该适用于整个系统。

例如,在我的工作中,此文件会自动生成,以便提供每个内部主机的 SSH 密钥,这样用户就可以根据需要登录主机,而无需提示输入密钥。这是通过一个可信的自动化过程完成的,该过程会在配置每个服务器时收集数据。

警告本质上只是告诉你,它ssh-keyscan只是告诉你扫描该服务器时会得到哪些密钥,而不是这些密钥是否是该服务器的正确、可信密钥。例如,如果你的网络上有一台机器拦截所有到端口 22 的连接,那么执行此操作ssh-keyscan github.com将为你提供拦截机器的密钥,而不是 GitHub 的真实密钥。要知道密钥是否合法,你需要某种带外信息,可以是人与人之间的通信、电子邮件、网页或使用 DNSSEC 验证的 SSHFP 记录。

相关内容