known_hosts具体举例说明
known_hosts
文件的具体示例与功能解析
known_hosts
文件是 SSH 协议中用于验证远程主机身份的核心文件,以下通过具体场景和示例说明其作用及操作方式:
1. 文件结构与条目示例
known_hosts
文件中的每一条目记录一个远程主机的公钥信息,格式为:
[主机名/IP地址] [公钥算法类型] [公钥字符串]
示例(来自实际场景):
example.com ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC9...(省略长字符串)
172.16.10.6 ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTI...(省略长字符串)
2
说明:
• 主机名/IP地址:标识远程主机的访问入口(如 example.com
或 172.16.10.6
)。
• 公钥算法类型:如 ssh-rsa
(RSA 算法)、ecdsa-sha2-nistp256
(椭圆曲线算法)。
• 公钥字符串:远程主机的公钥指纹,用于身份校验(长度通常超过 100 字符)。
2. 首次连接时的自动生成示例
当用户首次通过 SSH 连接到一个新主机时,系统会提示确认并自动生成条目:
$ ssh user@example.com
The authenticity of host 'example.com (93.184.216.34)' can't be established.
ECDSA key fingerprint is SHA256:...(指纹信息)
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
2
3
4
结果:
• 用户输入 yes
后,远程主机的公钥会自动写入 ~/.ssh/known_hosts
文件。
• 后续连接时,SSH 客户端会直接对比公钥,不再提示确认。
3. 公钥变更的冲突处理示例
若远程主机的公钥发生变化(如服务器重装系统),再次连接时会触发安全警告:
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!
Possible DNS Spoofing or Host Key Change Detected!
Offending key in ~/.ssh/known_hosts:1
2
3
4
解决方法:
删除旧条目:
• 命令行方式:ssh-keygen -R example.com
(自动删除相关条目)。• 手动编辑:用文本编辑器打开
known_hosts
,删除对应行。重新连接:再次执行
ssh user@example.com
,接受新公钥并更新文件。
4. 手动管理条目的场景示例
在自动化脚本或批量部署中,可能需要手动添加公钥以避免交互式提示:
# 使用 ssh-keyscan 扫描远程主机公钥并追加到文件
ssh-keyscan -H example.com >> ~/.ssh/known_hosts
2
结果:
• 文件末尾新增条目,格式与自动生成的条目一致。
• 适用于需要预先配置信任主机的场景(如 Ansible 批量管理)。
5. 跨系统路径示例
• Linux/macOS:~/.ssh/known_hosts
• Windows:%USERPROFILE%\.ssh\known_hosts
总结
known_hosts
文件通过存储远程主机的公钥实现身份验证,是 SSH 安全机制的重要组成部分。通过具体示例可见:
- 首次连接自动记录:用户确认后生成条目。
- 公钥变更告警:强制用户核实变更的合法性。
- 灵活管理方式:支持命令行工具(如
ssh-keygen
)和手动编辑。
理解其运作逻辑,可有效提升 SSH 连接的安全性和运维效率。