SSH 密钥对的全周期管理:从生成、部署到客户端使用
引言
在现代服务器运维与管理中,采用基于密钥对的公钥认证(Public Key Authentication)是取代传统密码认证的安全标准。该机制利用非对称加密原理,提供了比静态密码更高等级的安全性,能有效抵御字典攻击和暴力破解,同时为自动化运维提供了必要的基础。
本文旨在提供一个完整的技术实践指南,涵盖在 Linux 服务器环境(以 Rocky Linux 9 为例)中生成 SSH 密钥对,在服务器端进行部署与管理,以及最终在 Windows 客户端(以 Xshell 为例)上配置使用的全过程。
一、密钥对的生成 (服务器端)
此阶段在需要发起 SSH 连接的源服务器上执行。
1.1 执行生成命令
当前,Ed25519 是因其高安全性和优越性能而被广泛推荐的加密算法。
1 | |
1.2 理解交互式提示
执行命令后,终端将返回交互式提示:
密钥存储路径:
1
2Generating public/private ed25519 key pair.
Enter file in which to save the key (/home/your_user/.ssh/id_ed25519):建议直接按回车键接受默认路径 (
~/.ssh/)。SSH 客户端会自动在此路径下查找密钥。密码短语 (Passphrase):
1
2Enter 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 | |
此命令会提示输入目标服务器用户的密码,仅需此次输入。
方法 B: 手动部署
在不具备 ssh-copy-id 的环境中,可手动操作:
- 在源服务器上读取公钥内容:
cat ~/.ssh/id_ed25519.pub。 - 复制完整的公钥字符串。
- 登录目标服务器,执行以下操作,将公钥内容追加至授权文件:
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 会话配置
- 新建会话: 打开 Xshell,点击“文件” -> “新建”。在会话属性中填入会话名称、主机 IP 地址和端口号。
- 配置身份验证:
- 在左侧导航栏中选择“连接” -> “身份验证”。
- 将“方法”下拉菜单选择为
Public Key。 - 在“用户名”字段中输入你在服务器上的用户名。
- 导入用户密钥:
- 点击“用户密钥”字段右侧的“浏览…”按钮,打开“用户密钥”管理窗口。
- 点击“导入…”按钮,选择上一步中从服务器传输到本地的私钥文件。
- 如果私钥设置了密码短语,Xshell 会提示输入以完成导入。
- 完成连接:
- 在“用户密钥”管理窗口中选中刚导入的密钥,点击“确定”。
- 返回会话属性窗口,确认用户密钥已选定,点击“连接”或“确定”保存。
连接时,如果私钥的密码短语未被 Xshell 密码管理器保存,客户端将提示输入该密码短语。验证通过后,即可成功登录服务器,无需输入服务器账户密码。
结论
掌握 SSH 密钥对的生成、部署、管理和客户端配置是系统管理员和开发人员的一项基本技能。遵循本文所述流程,可以显著提升服务器账户的安全性,并优化远程管理的效率。