SSH known_hosts文件作用(防止中间人攻击MITM,记录已信任的服务器)

复制代码
~/.ssh/known_hosts

文章目录

  • [SSH known_hosts文件作用](#SSH known_hosts文件作用)
    • [📋 **核心作用**](#📋 核心作用)
      • [1. **防止中间人攻击(MITM)**](#1. 防止中间人攻击(MITM))
      • [2. **记录已信任的服务器**](#2. 记录已信任的服务器)
    • [📍 **文件位置和格式**](#📍 文件位置和格式)
    • [🔍 **工作原理**](#🔍 工作原理)
    • [🛡️ **安全意义**](#🛡️ 安全意义)
    • [🧹 **清理建议(针对离职场景)**](#🧹 清理建议(针对离职场景))
    • [⚠️ **重要提醒**](#⚠️ 重要提醒)

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! @
    @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@

🛡️ 安全意义

保护场景

  1. 网络劫持:攻击者试图伪装成目标服务器
  2. DNS 欺骗:域名被解析到恶意服务器
  3. 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  # 应该为空或不包含个人服务器

⚠️ 重要提醒

  1. 公司设备原则 :在公司电脑上,known_hosts 文件属于公司资产
  2. 离职前清理:务必清理个人项目的服务器记录
  3. 不要备份 :不要将 known_hosts 复制到个人设备
  4. 重新生成:在个人设备上重新建立信任关系

总结known_hosts 是 SSH 安全机制的核心组件,用于验证服务器身份。离职时清理它,既能保护你的私人项目不被他人访问,也符合公司信息安全政策。