~/.ssh/known_hosts
文章目录
- [SSH known_hosts文件作用](#SSH known_hosts文件作用)
SSH known_hosts文件作用
known_hosts 文件是 SSH 客户端的一个重要安全文件,主要用于服务器身份验证。以下是详细说明:
📋 核心作用
1. 防止中间人攻击(MITM)
- 当你第一次连接 SSH 服务器时,服务器会发送其公钥
- SSH 客户端将公钥的指纹(hash)存储在
known_hosts文件中 - 下次连接时,客户端会对比服务器提供的公钥与存储的指纹
- 如果不匹配,会发出警告,防止你连接到假冒的服务器
2. 记录已信任的服务器
- 存储你曾经连接过的所有 SSH 服务器的公钥信息
- 避免每次连接都手动确认服务器身份
📍 文件位置和格式
位置
~/.ssh/known_hosts
内容格式示例
github.com ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIOMqqnkVzrm0SdG6UOoqKLsabgH5C9okWi0dh2l9GKJl
192.168.1.100 ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBJ0...
[gitlab.example.com]:2222 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC...
每行包含:
- 服务器标识:主机名、IP地址或带端口的地址
- 密钥类型:ssh-ed25519、ecdsa-sha2-nistp256、ssh-rsa 等
- 公钥内容:服务器的公钥
🔍 工作原理
首次连接
bash
$ ssh user@github.com
The authenticity of host 'github.com (140.82.121.4)' can't be established.
ED25519 key fingerprint is SHA256:+DiY3wvvV6TuJJhbpZisF/zLDA0zPMSvHDKGSvY6z8Y.
Are you sure you want to continue connecting (yes/no)?
- 选择
yes后,服务器公钥指纹会被添加到known_hosts
后续连接
-
SSH 客户端自动验证服务器公钥
-
如果匹配,正常连接
-
如果不匹配,显示警告:
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
🛡️ 安全意义
保护场景
- 网络劫持:攻击者试图伪装成目标服务器
- DNS 欺骗:域名被解析到恶意服务器
- IP 欺骗:攻击者使用相同 IP 地址
风险提示
- 不要随意删除:删除后需要重新验证所有服务器,增加被攻击风险
- 谨慎处理警告 :当出现主机密钥变更警告时:
- ✅ 正常情况:服务器重装系统、更换 SSH 服务
- ❌ 危险情况:中间人攻击、网络劫持
🧹 清理建议(针对离职场景)
为什么需要清理
- 包含你个人项目的服务器信息(如 GitHub、GitLab、个人 VPS)
- 可能暴露你的工作习惯和项目信息
- 下一位使用者可能看到你连接过的所有服务器
安全清理方法
bash
# 1. 删除整个文件(最彻底)
rm ~/.ssh/known_hosts
# 2. 或者只删除特定条目(更精细)
ssh-keygen -R github.com # 删除 github.com 的记录
ssh-keygen -R gitlab.com # 删除 gitlab.com 的记录
ssh-keygen -R your-personal-vps.com # 删除个人 VPS 记录
# 3. 验证清理结果
cat ~/.ssh/known_hosts # 应该为空或不包含个人服务器
⚠️ 重要提醒
- 公司设备原则 :在公司电脑上,
known_hosts文件属于公司资产 - 离职前清理:务必清理个人项目的服务器记录
- 不要备份 :不要将
known_hosts复制到个人设备 - 重新生成:在个人设备上重新建立信任关系
总结 :known_hosts 是 SSH 安全机制的核心组件,用于验证服务器身份。离职时清理它,既能保护你的私人项目不被他人访问,也符合公司信息安全政策。