known_hosts 文件
known_hosts 文件 是什么?
known_hosts 文件OpenSSH 客户端文件(~/.ssh/known_hosts),用于固定服务器公钥,以便 SSH 在主机密钥变化时识别潜在的中间人攻击。
known_hosts 文件为 SSH 服务器身份实现了首次使用即信任(TOFU)模型。首次连接到某主机时,用户需要验证并接受其公钥指纹;随后 OpenSSH 将该主机及其密钥记录到 known_hosts(此外还有系统级的 /etc/ssh/ssh_known_hosts)。再次连接时,OpenSSH 将所获密钥与记录比对,如果不同则拒绝连接并提示可能的 MITM。默认启用主机名哈希(HashKnownHosts yes),即便文件泄露也不会暴露访问过的主机列表。更强的方案包括由 CA 签名的主机证书(TrustedUserCAKeys / @cert-authority)、由 DNSSEC 签署的 DNS SSHFP 记录(RFC 4255),以及在生产访问中通过 StrictHostKeyChecking=yes 拒绝任何交互式确认。
● 示例
- 01
当 known_hosts 中保存的主机密钥不再匹配时,OpenSSH 提示 'REMOTE HOST IDENTIFICATION HAS CHANGED!'。
- 02
使用带 @cert-authority 的 SSH 证书,使数百台服务器无需逐一出现在 known_hosts 中。
● 常见问题
known_hosts 文件 是什么?
OpenSSH 客户端文件(~/.ssh/known_hosts),用于固定服务器公钥,以便 SSH 在主机密钥变化时识别潜在的中间人攻击。 它属于网络安全的 网络安全 分类。
known_hosts 文件 是什么意思?
OpenSSH 客户端文件(~/.ssh/known_hosts),用于固定服务器公钥,以便 SSH 在主机密钥变化时识别潜在的中间人攻击。
known_hosts 文件 是如何工作的?
known_hosts 文件为 SSH 服务器身份实现了首次使用即信任(TOFU)模型。首次连接到某主机时,用户需要验证并接受其公钥指纹;随后 OpenSSH 将该主机及其密钥记录到 known_hosts(此外还有系统级的 /etc/ssh/ssh_known_hosts)。再次连接时,OpenSSH 将所获密钥与记录比对,如果不同则拒绝连接并提示可能的 MITM。默认启用主机名哈希(HashKnownHosts yes),即便文件泄露也不会暴露访问过的主机列表。更强的方案包括由 CA 签名的主机证书(TrustedUserCAKeys / @cert-authority)、由 DNSSEC 签署的 DNS SSHFP 记录(RFC 4255),以及在生产访问中通过 StrictHostKeyChecking=yes 拒绝任何交互式确认。
如何防御 known_hosts 文件?
针对 known_hosts 文件 的防御通常结合技术控制与运营实践,详见上方完整定义。
known_hosts 文件 还有哪些其他名称?
常见的别称包括: ~/.ssh/known_hosts, SSH 主机 TOFU。
● 相关术语
- network-security№ 1089
SSH 密钥类型
OpenSSH 支持的用户与主机身份认证非对称算法:RSA、ECDSA(NIST 曲线),以及目前的现代默认 Ed25519。
- network-security№ 1088
SSH 代理转发
OpenSSH 的一项功能,使用 -A 或 ForwardAgent yes 启用,会在远程主机上暴露一个 UNIX 套接字,使远端命令可借助本地 SSH 代理完成对后续主机的认证。
- network-security№ 345
DNSSEC
一组 DNS 扩展,通过数字签名使解析器能够验证 DNS 记录的真实性和完整性。
- network-security№ 1087
SSH
RFC 4251 定义、运行在 22 端口的加密网络协议,在不可信网络上提供经过身份验证、加密且完整性保护的远程登录、命令执行与隧道。