我希望创建一个基于脚本的解决方案。我知道给定设备应该具有的公钥,并且我可以使用 ssh-keygen 从该密钥生成指纹。如果设备具有与我已经拥有的公钥或指纹不同的公钥或指纹,我会认为这是一个错误。
我想用与我期望设备具有的公钥/指纹相对应的条目填充known_hosts文件。我应该指出我的known_hosts文件是散列的。因此,我不能简单地将机器名称添加到公钥中。散列增加了一些复杂性,使解决方案超出了我的范围。
其他类似问题的答案要么建议将 StrictHostKeyChecking 设置为 no,要么建议使用 ssh 或 ssh-keyscan 填充 known_hosts。
在使用 ssh 时被迫在提示符下回答“是”使脚本更难以编码(这正是我希望提前播种 known_hosts 文件的原因)。
ssh-keyscan 向设备询问其公钥和指纹,而不是使用我期望它拥有的公钥和指纹。
最后,我不想改变StrictHostKeyChecking的值。
我花了很多时间研究其他问题和答案。我希望有人可以提供不同的解决方案。
答案1
该known_hosts
文件只是主机名和密钥的列表。
假设你安全地获取了ssh_host_rsa_key.pub
属于 machine1.sweetjonnie.net 的文件
您通常可以/etc/ssh/ssh_host_rsa_key.pub
在远程系统上找到它(其他密钥类型也类似)。它看起来像
ssh-rsa AAAAB3NzaC1y ...[电子邮件保护]
你基本上有两个字段,一个字段介绍密钥的类型,另一个字段是 base64 中的实际密钥。最后一个字段[电子邮件保护]是一条评论,可能会被丢弃。
如果您想要将此条目添加到您的known_hosts
,您可以添加以下行:
machine1.sweetjonnie.net ssh-rsa AAAAB3NzaC1y...
您known_hosts
拥有相同的内容,并以适用的主机名或 IP 为前缀。
如果你有多个主机的密钥,你可能需要编写脚本,但实际的命令将取决于如何您已将它们存储起来(文件夹/文件名结构)。