SSH 密钥对的全周期管理:从生成、部署到客户端使用

引言

在现代服务器运维与管理中,采用基于密钥对的公钥认证(Public Key Authentication)是取代传统密码认证的安全标准。该机制利用非对称加密原理,提供了比静态密码更高等级的安全性,能有效抵御字典攻击和暴力破解,同时为自动化运维提供了必要的基础。

本文旨在提供一个完整的技术实践指南,涵盖在 Linux 服务器环境(以 Rocky Linux 9 为例)中生成 SSH 密钥对,在服务器端进行部署与管理,以及最终在 Windows 客户端(以 Xshell 为例)上配置使用的全过程。

一、密钥对的生成 (服务器端)

此阶段在需要发起 SSH 连接的源服务器上执行。

1.1 执行生成命令

当前,Ed25519 是因其高安全性和优越性能而被广泛推荐的加密算法。

1
2
3
# 使用 -t 参数指定算法类型为 ed25519
# 使用 -C 参数为密钥添加注释,便于识别与审计,通常使用邮箱或"user@hostname"格式
ssh-keygen -t ed25519 -C "admin@production-server-01"

1.2 理解交互式提示

执行命令后,终端将返回交互式提示:

  • 密钥存储路径:

    1
    2
    Generating public/private ed25519 key pair.
    Enter file in which to save the key (/home/your_user/.ssh/id_ed25519):

    建议直接按回车键接受默认路径 (~/.ssh/)。SSH 客户端会自动在此路径下查找密钥。

  • 密码短语 (Passphrase):

    1
    2
    Enter passphrase (empty for no passphrase): 
    Enter same passphrase again:

    为私钥设置密码短语是关键的安全增强措施。它为私钥文件本身提供了一层加密保护。即使私钥文件被意外获取,攻击者在没有对应密码短语的情况下也无法使用它。对于需要无人值守执行的自动化脚本,可以将其设置为空。

1.3 识别生成的文件

操作完成后,~/.ssh/ 目录下将生成两个核心文件:

  • id_ed25519: 私钥 (Private Key)。此文件是客户端的身份凭证,必须严格保密,其文件权限必须设置为 600
  • id_ed25519.pub: 公钥 (Public Key)。此文件用于分发至目标服务器,用于验证客户端身份。

二、密钥的部署与管理 (服务器端)

此阶段涉及将公钥部署至目标服务器,并进行后续的维护与审计。

2.1 公钥部署

要允许持有私钥的客户端登录,需将对应的公钥内容添加至目标服务器目标账户下的 ~/.ssh/authorized_keys 文件中。

方法 A: ssh-copy-id (推荐)

ssh-copy-id 是一个标准化的工具,它能安全、自动地完成公钥追加和文件权限设置。

1
2
# 语法: ssh-copy-id [user@]hostname
ssh-copy-id admin_user@192.168.1.10

此命令会提示输入目标服务器用户的密码,仅需此次输入。

方法 B: 手动部署

在不具备 ssh-copy-id 的环境中,可手动操作:

  1. 在源服务器上读取公钥内容:cat ~/.ssh/id_ed25519.pub
  2. 复制完整的公钥字符串。
  3. 登录目标服务器,执行以下操作,将公钥内容追加至授权文件:
    1
    2
    3
    4
    5
    # 确保目录存在且权限正确 (700)
    mkdir -p ~/.ssh && chmod 700 ~/.ssh
    # 将公钥追加到文件并设置正确权限 (600)
    echo "在此粘贴完整的公钥字符串" >> ~/.ssh/authorized_keys
    chmod 600 ~/.ssh/authorized_keys

2.2 密钥审计与维护

  • 查看身份密钥: 通过 ls -l ~/.ssh 命令可查看当前用户持有的身份密钥(私钥/公钥对)。
  • 审计授权列表: 通过 cat ~/.ssh/authorized_keys 命令可审查所有被授权登录到当前账户的公钥列表。定期审计此文件是必要的安全措施。
  • 吊销访问权限: 编辑 ~/.ssh/authorized_keys 文件,删除目标公钥所在的完整行,即可立即撤销其访问权限。
  • 更新密码短语: 使用 ssh-keygen -p -f /path/to/private_key 命令可以为现有私钥添加、删除或更改密码短语。

三、客户端配置 (Windows Xshell)

此阶段将在 Windows 操作系统的 Xshell 客户端上配置使用已生成的密钥对。

3.1 私钥的安全传输

首先,必须将服务器上生成的私钥文件(例如 id_ed25519)安全地传输到本地 Windows 计算机。必须使用加密通道完成此操作,推荐的工具为 SFTP 客户端,如 WinSCP 或 FileZilla。通过 SFTP 连接服务器,下载 ~/.ssh/ 目录下的私钥文件。

3.2 Xshell 会话配置

  1. 新建会话: 打开 Xshell,点击“文件” -> “新建”。在会话属性中填入会话名称、主机 IP 地址和端口号。
  2. 配置身份验证:
    • 在左侧导航栏中选择“连接” -> “身份验证”。
    • 将“方法”下拉菜单选择为 Public Key
    • 在“用户名”字段中输入你在服务器上的用户名。
  3. 导入用户密钥:
    • 点击“用户密钥”字段右侧的“浏览…”按钮,打开“用户密钥”管理窗口。
    • 点击“导入…”按钮,选择上一步中从服务器传输到本地的私钥文件。
    • 如果私钥设置了密码短语,Xshell 会提示输入以完成导入。
  4. 完成连接:
    • 在“用户密钥”管理窗口中选中刚导入的密钥,点击“确定”。
    • 返回会话属性窗口,确认用户密钥已选定,点击“连接”或“确定”保存。

连接时,如果私钥的密码短语未被 Xshell 密码管理器保存,客户端将提示输入该密码短语。验证通过后,即可成功登录服务器,无需输入服务器账户密码。

结论

掌握 SSH 密钥对的生成、部署、管理和客户端配置是系统管理员和开发人员的一项基本技能。遵循本文所述流程,可以显著提升服务器账户的安全性,并优化远程管理的效率。


SSH 密钥对的全周期管理:从生成、部署到客户端使用
https://blog.yonagi.top/2025/08/06/ab33c6f84d57/
作者
Yonagi
发布于
2025年8月7日
许可协议