ssh-keygen 是什么
ssh-keygen 负责 SSH 密钥对的生成与日常维护。它能做的事比名字显示的更多:生成密钥、查看与核对指纹、给私钥加口令、把公钥复制到远端、以及清理 known_hosts 里过期的主机记录。密钥类型上,ed25519 是当前的默认推荐(密钥短、签名快、安全性好),只有在需要兼容较老的设备或系统时才退回 RSA 并指定 4096 位。
基本信息
| 用途 | 生成密钥对、查看指纹、维护 known_hosts 与 authorized_keys |
|---|---|
| 语法 | ssh-keygen -t 类型 [-C 备注] [-f 文件名] [-N 口令];-lf 查看公钥指纹;-R 主机 清理旧记录 |
| 推荐类型 | ed25519;兼容老环境用 rsa -b 4096,dsa 已废弃不要再用 |
| 权限 | 私钥必须 600、.ssh 目录 700,远程家目录不能对同组可写 |
典型使用场景
- 免密登录:为运维人员或自动化账号配置公钥登录,替代口令认证
- CI 部署密钥:给流水线生成专用密钥对,只允许部署所需的最小权限
- 主机指纹核对:首次连接前核对服务器指纹,避免中间人风险
- 重装系统后清记录:主机密钥变化导致连接被拒,用 -R 清掉旧条目
- 批量分发:把公钥通过 ssh-copy-id 或配置管理工具下发到目标机
生成与维护
生成与维护
ssh-keygen -t ed25519 -C 'ops@ci' # 生成密钥对,默认放在 ~/.ssh
ssh-keygen -t ed25519 -a 100 -f ~/.ssh/deploy -N '' # 指定文件名与空口令,加 -a 提高口令派生强度
ssh-keygen -lf ~/.ssh/id_ed25519.pub # 查看公钥指纹与类型
ssh-keygen -R 10.0.0.5 # 清掉该主机的旧指纹(重装系统后必做)
ssh-keygen -R 10.0.0.5 -f ~/.ssh/known_hosts # 指定 known_hosts 文件
ls -l ~/.ssh/id_ed25519 # 检查私钥权限是否为 600复制公钥并验证密钥登录
复制公钥并验证密钥登录
ssh-copy-id -i ~/.ssh/id_ed25519.pub user@server
ssh -o PreferredAuthentications=publickey user@server # 强制走密钥,确认可用
ssh -v user@server 2>&1 | grep -i 'Offering public key' # -v 观察认证过程
# 远端权限自查:家目录不可对同组可写,否则 sshd 会拒绝使用该密钥
ssh user@server 'ls -ld ~ ~/.ssh ~/.ssh/authorized_keys'密钥类型对照
| 类型 | 特点 | 适用 |
|---|---|---|
| ed25519 | 密钥短、签名快、默认安全强度高 | 当前首选,现代系统与设备都支持 |
| rsa 4096 | 兼容性最好,密钥与签名都更长 | 对接老设备或老版本 SSH 时使用 |
| ecdsa | 曾有兼容优势,但曲线选择存在争议 | 只在特定设备要求时使用 |
| dsa | 已被弃用,多数新版本默认禁用 | 不要在新环境使用 |
给私钥设置口令能显著提升安全,但会带来非交互场景的麻烦:CI 里通常使用空口令的专用密钥并严格限制权限与来源,人工运维则配合 ssh-agent 缓存口令,兼顾方便与安全。
私钥文件权限必须为 600、.ssh 目录为 700,否则 ssh 会直接拒绝使用。另外,私钥不要放进代码仓库或镜像,一次泄露就等于长期有效的通行证。