头图

下面是一段关于 Linux 系统中 ~/.ssh/known_hosts 文件的简要说明和补充信息,帮助你更好地理解和使用该文件:


1. 什么是 known_hosts 文件

  • 概念known_hosts 是存储“已知远程主机公钥”的文件。当我们使用 SSH 连接到远程服务器时,SSH 客户端会检查该服务器的公钥是否已记录在 known_hosts 文件中,以确保连接到的是预期的服务器,而不是被中间人攻击所冒充的服务器。
  • 作用:通过校验服务器的公钥,SSH 可以防止中间人攻击,确保连接的真实性和安全性。

2. known_hosts 的默认路径

  • 位置:通常位于当前用户家目录下的 ~/.ssh/known_hosts
  • 权限:一般情况下,~/.ssh 目录的权限通常为 700(仅用户自己可访问),known_hosts 文件的权限为 644(用户读写、组读、其他读),或者更严格一些,这取决于系统的安全策略。

3. known_hosts 文件中的记录格式

每一条记录通常包括以下信息:

  1. 远程主机名(或 IP 地址)
  2. SSH 公钥算法类型(例如 ssh-rsaecdsa-sha2-nistp256 等)
  3. 远程主机的公钥

示例条目(简化示例):

example.com ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC...

在实际环境中,公钥字符串会更长。


4. known_hosts 的常见使用场景

  1. 首次连接到新的远程主机

    • 当你第一次使用 SSH 连接到一台尚未在 known_hosts 中记录过的主机时,系统会提示你确认“主机指纹”,一旦你选择“是”,主机的公钥就会写入到 known_hosts 文件里。
    • 确认后再次连接同一主机时,SSH 就会对比 known_hosts 中的记录来验证主机的真实性,连接时不会再弹出提示。
  2. 主机公钥发生变化

    • 如果远程主机的公钥发生了变化,SSH 会发出警告(例如 WARNING: POSSIBLE DNS SPOOFING DETECTED!REMOTE HOST IDENTIFICATION HAS CHANGED!)。
    • 这有可能是以下原因所致:

      • 服务器做了重新安装或更换密钥。
      • 公钥真的被恶意篡改,存在安全风险。
    • 此时需要确认变更是否可信,如果确认无风险,可以手动从 known_hosts 中删除旧的公钥条目,再重新连接以添加新公钥。

5. 如何维护 known_hosts

  1. 查看 known_hosts

    • 直接使用文本编辑器(如 vimnano)打开 ~/.ssh/known_hosts 查看。
    • 也可以使用 ssh-keygen -l -f ~/.ssh/known_hosts 查看所有主机条目的指纹。
  2. 删除特定主机条目

    • 如果需要删除特定主机的条目,可以直接在文本编辑器中删除相应行。
    • 也可使用 ssh-keygen -R <hostname> 命令自动删除某个指定主机的记录。例如:

      ssh-keygen -R example.com

      这条命令会在 known_hosts 中自动查找并删除 example.com 相关的条目。

  3. 手动添加公钥

    • 在需要的情况下,你也可以手动将某个远程主机的公钥条目添加到 known_hosts 中(比如在批量部署脚本中或提前分发公钥的场景)。
    • 格式需要与 known_hosts 内已有的条目一致。

6. 总结

  • known_hosts 文件是 SSH 验证远程主机身份的重要机制,通过存储并校验服务器公钥,避免了因公钥被冒充或篡改引发的安全风险。
  • 维护好该文件,及时添加、删除或更新远程主机的公钥,可以大幅降低 SSH 连接遭到中间人攻击的可能性,确保连接的安全性和可靠性。

蓝易云
33 声望3 粉丝