我阅读了以下教程
我确认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
直到这里我理解了命令的所有这两种变体。我在我的电脑上确认了这种行为
现在,这篇文章的原因,经过对该命令的研究 - 根据:
两者都提到了/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
该文件
/etc/ssh/ssh_known_hosts
通常在典型安装中不存在。它的存在专门提供一种方法来提供~/.ssh/known_hosts
对系统的所有用户都有效的等效方法。它不会自动更新,因为 (a) 大多数用户没有修改它的权限和 (b) 仅仅因为一个随机用户批准一个密钥并不意味着该决定应该适用于整个系统。例如,在我的工作中,这个文件是自动生成的,这样每个内部主机的 SSH 密钥都会被提供,这样用户就可以根据需要登录主机,而不会被提示输入密钥。这是由一个受信任的自动化过程完成的,该过程在配置每个服务器时收集数据。
该警告本质上只是告诉您,
ssh-keyscan
所做的只是告诉您在扫描该服务器时获得了哪些密钥,而不是这些密钥是否是该服务器的正确、受信任的密钥。例如,如果您的网络上有一台机器拦截到端口 22 的所有连接,则执行 anssh-keyscan github.com
将为您提供拦截机器的密钥,而不是 GitHub 的真正密钥。要知道密钥是否合法,您需要某种带外信息,这可能是人与人之间的通信、电子邮件、网页或通过 DNSSEC 验证的 SSHFP 记录。