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

Man*_*dan 2 ssh openssh ssh-keys

我阅读了以下教程

我确认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
Run Code Online (Sandbox Code Playgroud)

我可以通过以下选项过滤它们:-t

  • ssh-keyscan -t key_type 192.168.1.X

哪里key_type可以rsa,ecdsaed25519甚至混合,例如:rsa,ecdsa

例如:

  • ssh-keyscan -t rsa 192.168.1.X

到目前为止,我理解了该命令的所有这两种变体。我在我的电脑上确认了该行为

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

两者都提到了该/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

小智 6

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

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

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