远程管理 Linux 服务器时,安全性是核心诉求。虽然传统的密码验证简单直接,但在暴力破解和钓鱼攻击面前非常脆弱。SSH(Secure Shell)密钥对通过公钥加密技术提供了一种更稳健的方案:服务器可以验证你的身份,而无需在网络上发送任何敏感的秘密。
本文将介绍如何使用 OpenSSH 工具集在 macOS、Linux 和 Windows(通过 WSL)上创建和管理 SSH 密钥。我们将从算法选择开始,逐步讲解生成、权限设定及服务器部署的完整流程。
为什么选择 SSH 密钥?
SSH 密钥由成对的两个加密值组成:私钥(保留在本地计算机上)和公钥(复制到你想要访问的任何服务器上)。
当你发起连接请求时,服务器会使用公钥加密一个挑战(Challenge),只有持有匹配私钥的客户端才能解密并给出正确响应。这种机制确保了即使网络流量被截获,攻击者也无法获得任何用于登录的凭证。
算法选择:Ed25519 还是 RSA?
目前主流的 OpenSSH 支持多种算法。下表展示了它们的特性对比:
| 密钥类型 | 安全性 | 处理速度 | 兼容性 | 推荐场景 |
|---|---|---|---|---|
| Ed25519 | 极高 (256-bit) | 极快 | 现代 OpenSSH (7.0+) | 首选方案,性能与安全平衡极佳 |
| RSA 4096 | 高 | 较慢 | 通用 | 仅用于旧系统或有特定兼容性要求的场景 |
| ECDSA | 高 | 快 | OpenSSH 5.7+ | Ed25519 不可用时的备选 |
Ed25519 是目前的行业推荐标准。它基于椭圆曲线加密,生成的密钥更短(方便复制粘贴),且在抵御某些类型的密码分析攻击时更具优势。
第一步:准备终端环境
生成密钥的第一步是打开操作系统的命令行界面:
- macOS: 通过“应用程序” -> “实用工具”找到“终端”(Terminal)。
- Linux: 使用系统自带的任意终端模拟器。
- Windows (WSL): 从开始菜单启动安装好的 Linux 分发版(如 Ubuntu)。
输入以下命令确认系统中已安装 OpenSSH:
ssh -V
只要返回类似 OpenSSH_x.x 的信息,即可开始。如果提示命令不存在,Linux 用户需通过包管理器安装(例如 Ubuntu 上执行 sudo apt install openssh-client)。
第二步:生成 SSH 密钥对
运行 ssh-keygen 工具。建议加上 -C 参数来添加注释(通常是你的邮箱),这能帮你识别这把密钥是为谁或哪台机器准备的。
ssh-keygen -t ed25519 -C "your_email@example.com"
关键配置项说明:
- 保存路径:系统会提示
Enter file in which to save the key。默认路径为~/.ssh/id_ed25519。直接按 回车 接受即可,这样 SSH 客户端能自动找到它。- 注意:如果该路径下已存在同名密钥,系统会询问是否覆盖。覆盖会导致旧密钥永久丢失。
- 设置密码短语(Passphrase):这是为私钥加的一道保险。即使有人盗取了你的私钥文件,没有密码短语也无法使用。
- 你可以直接按两次回车跳过,但这会降低安全性。建议设置一个复杂的短语,后续可以通过
ssh-agent免去重复输入的麻烦。
- 你可以直接按两次回车跳过,但这会降低安全性。建议设置一个复杂的短语,后续可以通过
生成成功后,你会在 ~/.ssh 目录下看到两个文件:
id_ed25519: 你的私钥,绝不能泄露。id_ed25519.pub: 你的公钥,可以安全地发给任何人或服务器。
第三步:配置正确的文件权限
OpenSSH 对文件权限有极严苛的要求。如果权限过于开放,客户端会认为该密钥不安全并拒绝使用。
请执行以下命令来收紧权限:
# 确保 .ssh 目录仅当前用户可读写
chmod 700 ~/.ssh
# 确保私钥文件仅当前用户可读写
chmod 600 ~/.ssh/id_ed25519
你可以通过 ls -la ~/.ssh 查看结果,私钥的权限字符串应显示为 -rw-------。
第四步:使用 SSH 代理管理密码短语
如果你在生成密钥时设置了密码短语,但不想每次连接都输入,可以使用 ssh-agent。
首先启动代理:
eval "$(ssh-agent -s)"
然后将密钥添加到代理中:
ssh-add ~/.ssh/id_ed25519
针对 macOS 用户的特殊技巧: macOS 可以将密码短语存入系统钥匙串(Keychain),实现跨重启的自动加载。请使用以下命令:
# macOS Ventura 及以后版本
ssh-add --apple-use-keychain ~/.ssh/id_ed25519
第五步:将公钥部署到服务器
要通过密钥登录,必须将公钥的内容添加到远程服务器对应用户的 ~/.ssh/authorized_keys 文件中。
最简单的方法是使用 ssh-copy-id 工具:
ssh-copy-id username@remote_host_address
输入一次远程服务器的登录密码后,系统会自动完成公钥的上传和权限设置。完成后,你就可以直接通过 ssh username@remote_host_address 登录,而不再需要密码。
手动部署(当没有 ssh-copy-id 时)
如果无法使用上述工具,你可以手动操作:
- 在本地运行
cat ~/.ssh/id_ed25519.pub复制公钥内容。 - 登录服务器,执行:
mkdir -p ~/.ssh echo "你的公钥内容" >> ~/.ssh/authorized_keys chmod 700 ~/.ssh chmod 600 ~/.ssh/authorized_keys
常见问题与进阶建议
- 如果服务器不支持 Ed25519 怎么办?
使用 RSA 4096 作为备选方案:
ssh-keygen -t rsa -b 4096。 - 私钥文件可以多处备份吗? 可以备份,但必须像保护存折一样保护它。绝不要将其上传到 GitHub、网盘或通过邮件发送。
- 如何检查连接详情?
如果你无法通过密钥登录,可以加上
-v(Verbose)参数查看详细握手过程:ssh -v username@host。
SSH 密钥不仅仅是一种便捷的登录手段,它是现代安全运维的基础。掌握了这一套流程,你就为管理更复杂的分布式系统和自动化部署做好了准备。
关于
关注我获取更多资讯