我阅读了以下教程
我确认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
可以是rsa
、ecdsa
和ed25519
,甚至可以混合使用,例如: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 记录。