欢迎光临
我们一直在努力

Linux命令-ssh-keygen(生成 SSH 密钥对)

Linux命令-ssh-keygen(生成 SSH 密钥对)

    • 快速参考
    • 密钥类型对比
    • 生成密钥对
    • 常用选项详解
    • 密钥管理操作
    • 高级功能
    • 不同场景的密钥策略
    • 批量生成与自动化
    • 公钥文件格式

ssh-keygen 是 SSH 协议套件中的密钥生成工具,用于创建、管理和转换 SSH 认证密钥。它支持多种密钥算法(RSA、DSA、ECDSA、Ed25519),可以生成公钥/私钥对,是 SSH 安全认证体系的基础。

快速参考

ssh-keygen [选项]

ssh-keygen 生成的密钥对包括私钥(默认为 ~/.ssh/id_<type>)和公钥(~/.ssh/id_<type>.pub)。私钥永远不能分享,公钥可以安全分发。

密钥类型对比

算法默认位数安全性性能兼容性推荐度
Ed25519 256 极高 最快 OpenSSH 6.5+ 首选
ECDSA 256/384/521 较广泛 推荐
RSA 3072 较慢 最广泛 可用
DSA 1024 废弃 禁用

生成密钥对

# 推荐:生成 Ed25519 密钥(现代、快速、安全)
ssh-keygen -t ed25519 -C "user@example.com"

# 生成 Ed25519 并指定文件名
ssh-keygen -t ed25519 -f ~/.ssh/id_ed25519_prod -C "production_key"

# 生成 RSA 密钥(4096 位)
ssh-keygen -t rsa -b 4096 -C "rsa_legacy_key"

# 生成 ECDSA 密钥(521 位曲线)
ssh-keygen -t ecdsa -b 521 -C "ecdsa_backup_key"

# 无交互生成(用于脚本/CI)
ssh-keygen -t ed25519 -f ~/.ssh/deploy_key -N "" -C "ci_deploy"

# 生成密钥并设置强密码
ssh-keygen -t ed25519 -f ~/.ssh/important_key -C "encrypted_key"
# 交互式输入密码(推荐!)

常用选项详解

# -t: 指定密钥类型
ssh-keygen -t ed25519 # 推荐
ssh-keygen -t ecdsa # 备用
ssh-keygen -t rsa # 传统兼容

# -b: 密钥位数
ssh-keygen -t rsa -b 4096
ssh-keygen -t ecdsa -b 521

# -C: 注释(通常放邮箱/标识)
ssh-keygen -t ed25519 -C "admin@company.com"

# -f: 输出文件名
ssh-keygen -t ed25519 -f ~/.ssh/github_key -C "github_personal"

# -N: 密码(空串 = 无密码,-N "" 为无密码)
ssh-keygen -t ed25519 -f ~/.ssh/auto_key -N ""

# -P: 修改密码时指定旧密码
# -p: 修改密码(交互式)

密钥管理操作

# 修改已有密钥的密码
ssh-keygen -p -f ~/.ssh/id_ed25519

# 修改指定密钥的密码(非交互)
ssh-keygen -p -P "old_password" -N "new_password" -f ~/.ssh/id_ed25519

# 移除密码
ssh-keygen -p -P "current_password" -N "" -f ~/.ssh/id_ed25519

# 查看公钥指纹(多种格式)
ssh-keygen -lf ~/.ssh/id_ed25519.pub
# 256 SHA256:xxxxx… user@example.com (ED25519)

# 使用 MD5 格式指纹
ssh-keygen -E md5 -lf ~/.ssh/id_ed25519.pub

# 从私钥重建公钥
ssh-keygen -y -f ~/.ssh/id_ed25519 > recovered.pub

# 确认恢复的公钥与原始一致
diff recovered.pub ~/.ssh/id_ed25519.pub && echo "一致"

高级功能

# 转换密钥格式(PEM → OpenSSH 新格式)
ssh-keygen -p -m PEM -f ~/.ssh/old_rsa_key

# 从 PEM 转为 OpenSSH 格式
ssh-keygen -p -m RFC4716 -f ~/.ssh/id_rsa

# 生成主机密钥(系统管理员操作)
sudo ssh-keygen -t ed25519 -f /etc/ssh/ssh_host_ed25519_key -N ""

# 吊销已泄露的公钥(创建 KRL)
ssh-keygen -k -f revoked_keys.krl ~/.ssh/compromised_key.pub

# 测试证书 KRL
ssh-keygen -Q -f revoked_keys.krl ~/.ssh/compromised_key.pub

# 签署用户证书(CA 操作)
ssh-keygen -s ca_key -I user_id -n username -V +52w user_key.pub

# 生成 SSHFP DNS 记录
ssh-keygen -r hostname.example.com

不同场景的密钥策略

# 场景 1: GitHub 个人密钥
ssh-keygen -t ed25519 -f ~/.ssh/id_ed25519_github -C "github@example.com"

# 场景 2: 生产服务器部署密钥
ssh-keygen -t ed25519 -f ~/.ssh/prod_deploy -C "deploy@production" -N ""
# ⚠️ 部署密钥无密码,需严格保护私钥文件

# 场景 3: 临时 CI 密钥
TEMP_KEY="/tmp/ci_temp_key"
ssh-keygen -t ed25519 -f "$TEMP_KEY" -N "" -C "ci_temp"
# 使用后立即销毁
shred -u "$TEMP_KEY" "$TEMP_KEY.pub"

# 场景 4: 高安全需求密钥
ssh-keygen -t ed25519 -a 100 -f ~/.ssh/high_sec_key -C "high_security"
# -a 100: KDF 轮数(增加暴力破解难度)

批量生成与自动化

# 为多台服务器生成统一密钥
SERVERS=("web1" "web2" "db1" "db2")
for server in "${SERVERS[@]}"; do
ssh-keygen -t ed25519 \\
-f ~/.ssh/"${server}_key" \\
-N "" \\
-C "${server}@company.com" \\
-q # 静默模式
echo "已生成: ${server}_key"
done

# 密钥审计脚本
audit_keys() {
echo "===== SSH 密钥审计 ====="
echo "时间: $(date)"
echo ""
for key in ~/.ssh/id_*; do
if [[ "$key" != *.pub ]]; then
echo "— $(basename "$key") —"
ssh-keygen -lf "$key" 2>/dev/null
stat -c "权限: %a 修改: %y" "$key"
echo ""
fi
done
}
audit_keys

# 检查弱密钥
# DSA 密钥不应再使用
find ~/.ssh/ -name "id_dsa*" -exec echo "⚠️ DSA 密钥已废弃: {}" \\;

# RSA < 2048 位的密钥不安全
for key in ~/.ssh/id_rsa; do
[ -f "$key" ] || continue
BITS=$(ssh-keygen -lf "$key" | awk '{print $1}')
if [ "$BITS" -lt 2048 ]; then
echo "⚠️ RSA 密钥位数不足: $key ($BITS bit)"
fi
done

公钥文件格式

# 公钥文件内容结构
cat ~/.ssh/id_ed25519.pub
# ssh-ed25519 AAAAC3NzaC1lZ… comment@example.com
# |算法类型| |——- Base64 编码公钥 ——–| |—- 注释 —-|

# 公钥的四种查看方式
# 1. 直接读取文件
cat ~/.ssh/id_ed25519.pub

# 2. 从私钥导出
ssh-keygen -y -f ~/.ssh/id_ed25519

# 3. 查看指纹
ssh-keygen -lf ~/.ssh/id_ed25519.pub

# 4. 从 ssh-agent 列出
ssh-add -L

安全准则:

  • Ed25519 是现代 Linux 环境的最佳选择
  • 绝不共享私钥,私钥权限必须是 600
  • 为不同目的使用不同密钥对
  • 定期审查并吊销不再使用的公钥
赞(0)
未经允许不得转载:171主机测评 » Linux命令-ssh-keygen(生成 SSH 密钥对)
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址