Linux 中生成 SSH 密钥对 🔐

📌 引言
SSH(Secure Shell)密钥对是 Linux 系统中安全远程登录和文件传输的基石。采用密钥认证比传统的密码认证更安全,且便于自动化管理。本文将介绍如何使用现代 ed25519 算法和传统 RSA 算法生成 SSH 密钥对,并帮助你理解其优势与适用场景。


📋 目录导航


✨ 特点和功能

  • 🔐 更安全的认证方式:密钥认证比密码更难被暴力破解
  • 高效的连接体验:一次配置,长期有效,支持快速登录与自动化脚本
  • 🛠 多用途支持:适用于 SSH 登录、Git 操作、rsync 同步等多种场景
  • 🧩 灵活的密钥管理:支持为不同服务使用不同密钥,实现权限隔离

温馨提示:本文所有操作命令均在 客户端 FnOS 终端 中执行,请确保您已在本地环境打开终端窗口。


🔐 为什么选择 SSH 密钥认证?

SSH 密钥对由公钥和私钥组成,其优势包括:

  • 🔒 高安全性:私钥保存在客户端,必须严格保密,公钥可部署到任何需要访问的服务器;
  • 高效认证:基于加密算法,比密码更抵抗暴力破解,登录过程更快速;
  • 🤖 自动化支持:可实现无需人工干预的自动登录,适合CI/CD、运维脚本等场景;
  • 🧩 多密钥管理:可为不同服务使用不同密钥,灵活且便于权限隔离。

⚖️ 算法选择:ed25519 vs RSA

🚀 现代选择:ed25519

ed25519 是新一代椭圆曲线加密算法,优势包括:

  • 📏 短密钥高强度:256位密钥即可提供相当于RSA 3072位的安全性;
  • 性能优越:生成速度快,签名验证效率高;
  • 🔒 抗攻击性强:天然抗侧信道攻击,安全性更高;
  • 🌍 广泛支持:被 OpenSSH 6.5+ 及现代主流系统支持。

🛡️ 传统选择:RSA

RSA 是历史悠久且广泛支持的算法:

  • 🤝 兼容性极佳:兼容几乎所有 SSH 实现(包括老旧系统);
  • 📊 可调整强度:支持2048、3072、4096等多种密钥长度;
  • 🏢 行业标准:经过长期实战检验,被众多企业环境采用。

💡 选择建议:新项目优先选择 ed25519;如需兼容老系统,则使用 RSA 4096。


🔧 生成 SSH 密钥对

使用 ed25519 算法(推荐)

打开终端,运行以下命令:

1
2
3
4
5
# 不指定保持路径和名称
ssh-keygen -t ed25519

# 指定保持路径和名称
ssh-keygen -t ed25519 -f ~/.ssh/Debian13_SSH

参数说明

  • -t ed25519:指定使用 ed25519 算法
  • -C "你的注释":添加标识注释,通常用邮箱或用途描述
  • -f ~/.ssh/Debian13_SSH:指定密钥文件保存路径和名称

使用 RSA 算法

如需使用传统 RSA 算法,运行:

1
2
3
4
5
# 不指定保持路径和名称
ssh-keygen -t rsa -b 4096

# 指定保持路径和名称
ssh-keygen -t rsa -b 4096 -f ~/.ssh/Debian13_SSH

额外参数

  • -b 4096:指定密钥位数为 4096,提供更高安全性
  • -C "你的注释":添加标识注释,通常用邮箱或用途描述
  • -f ~/.ssh/Debian13_SSH:指定密钥文件保存路径和名称

📁 密钥生成过程

执行命令后,系统会提示:

  1. 📁 选择密钥保存位置(已通过 -f 参数指定则可跳过)
  2. 🔑 设置密钥密码(可选但推荐,增加额外安全层)
  3. ✅ 确认密码

生成完成后,将在指定位置创建两个文件:

  • Debian13_SSH:私钥文件(权限自动设为600)
  • Debian13_SSH.pub:公钥文件(可自由分发)

📝 注意:私钥权限必须为600,否则SSH客户端会拒绝使用。


🚀 部署和使用密钥

  1. 📤 将公钥部署到服务器

    1
    ssh-copy-id -i ~/.ssh/Debian13_SSH.pub user@server

    或手动将公钥内容添加到服务器 ~/.ssh/authorized_keys 文件中

  2. 🧪 测试连接

    1
    ssh -i ~/.ssh/Debian13_SSH user@server
  3. 🤖 为方便使用,可添加密钥到 ssh-agent

    1
    2
    eval "$(ssh-agent -s)" && \
    ssh-add ~/.ssh/Debian13_SSH
  4. 🧪 再次测试连接

    1
    ssh user@server
    • 效果:在此终端会话期间,任何需要 SSH 认证的操作(例如:ssh, scp, git push 等),系统都会自动使用 ssh-agent 中托管的这把密钥,而不需要您再次输入密码(除非您第一次添加时输入的密码短语是错误的,或者您重启了终端/服务器)

⚙️ 简化 SSH 连接配置

为了避免每次都需要指定密钥文件,您可以创建一个 SSH 配置文件:

  1. 📝 编辑或创建 SSH 配置文件

    1
    nano ~/.ssh/config
  2. 📋 添加以下内容

    1
    2
    3
    4
    Host debian13
    HostName 10.10.10.246
    User root
    IdentityFile ~/.ssh/Debian13_SSH
  3. 💾 保存并退出(按 Ctrl+X,然后按 Y,最后按 Enter)

  4. 🚀 现在您可以使用简化的命令登录

    1
    ssh debian13

💡 提示:您可以配置多个 Host 条目来管理不同服务器的连接方式。


💡 最佳实践建议

  • 🔐 密钥分离:为不同服务使用不同密钥对,提高安全性;
  • 🎯 强密码保护:为私钥设置强密码,特别是用于重要系统的密钥;
  • 定期更换:建议每6-12个月更换一次密钥;
  • 🤖 代理管理:使用 ssh-agent 管理密钥,避免频繁输入密码;
  • 💾 安全备份:备份私钥到安全位置(建议加密存储);
  • 🚫 禁用密码登录:在服务器上禁用密码认证,仅允许密钥登录;
  • 📝 使用SSH配置:利用 ~/.ssh/config 文件简化连接命令。

🔍 故障排除

如果遇到连接问题:

  1. 📁 检查私钥权限:应为600 (chmod 600 ~/.ssh/Debian13_SSH)
  2. 确认公钥部署:服务器端公钥已正确添加到 authorized_keys
  3. ⚙️ 验证SSH配置:服务器 SSH 配置允许密钥认证
  4. 🌐 网络检查:检查防火墙和网络连接设置
  5. 📋 详细日志:使用 -v 参数获取详细调试信息 (ssh -v -i ~/.ssh/Debian13_SSH user@server)
  6. 🔧 检查SSH配置:确认 ~/.ssh/config 文件语法正确

通过以上步骤,您可以在 Linux 系统上成功生成和使用 SSH 密钥对,极大提高系统访问的安全性。根据您的需求选择适合的算法,ed25519 是现代应用的推荐选择,而 RSA 则提供了最广泛的兼容性。

提示:定期审查密钥使用情况并及时撤销不再需要的密钥访问权限,是保持系统安全的重要措施。