SSH 密钥认证比密码认证更安全、更方便。但面对多种密钥类型,应该如何选择?本文聚焦这个问题。

常见密钥类型对比

类型 密钥长度 安全性 性能 兼容性
ed25519 256位 极高 最快 OpenSSH 6.5+
rsa 4096位 较慢 广泛兼容
ecdsa 521位 较好

推荐:优先选择 Ed25519

Ed25519 是目前最推荐的 SSH 密钥类型:

  • 安全性高:基于椭圆曲线,256位密钥相当于 RSA 3072位
  • 性能优秀:签名和验证速度都很快
  • 密钥简短:私钥仅 411 字节,公钥仅 98 字节

生成 Ed25519 密钥

1
ssh-keygen -t ed25519 -C "your_email@example.com"

输出示例:

1
2
3
4
5
Generating public/private ed25519 key pair.
Your identification has been saved in test_key_ed25519
Your public key has been saved in test_key_ed25519.pub
The key fingerprint is:
SHA256:YoI5R0OxDJMGH/CyTuWW5qWTY4qR/ffQAIAV8/MwdHk your_email@example.com

查看密钥指纹

1
ssh-keygen -lf ~/.ssh/id_ed25519

输出:

1
256 SHA256:YoI5R0OxDJMGH/CyTuWW5qWTY4qR/ffQAIAV8/MwdHk your_email@example.com (ED25519)

兼容场景:RSA 密钥

某些老旧系统不支持 Ed25519,此时使用 RSA:

1
ssh-keygen -t rsa -b 4096 -C "your_email@example.com"

RSA 与 Ed25519 对比

1
2
3
4
5
# 密钥文件大小对比
411  id_ed25519      # Ed25519 私钥
98   id_ed25519.pub  # Ed25519 公钥
3.4K id_rsa          # RSA-4096 私钥
742  id_rsa.pub      # RSA-4096 公钥

RSA 密钥大 8 倍,但兼容性最好。

密钥格式转换

OpenSSH 新版本默认使用新格式,但某些工具需要 PEM 格式。

转换为 PEM 格式

1
ssh-keygen -p -m PEM -f ~/.ssh/id_rsa

转换后私钥开头:

1
-----BEGIN RSA PRIVATE KEY-----

从 PEM 转回 OpenSSH 格式

1
ssh-keygen -p -m RFC4716 -f ~/.ssh/id_rsa

快速选择指南

1
2
3
4
5
6
你的场景                              推荐密钥类型
─────────────────────────────────────────────────
新项目 / 个人使用                      Ed25519
需要兼容老系统                         RSA-4096
Git 服务 (GitHub/GitLab)              Ed25519
云服务器 (AWS/阿里云)                  Ed25519 或 RSA

参考资料