ssh-keygen 命令详解
更新时间:2026-08-28。本文是「一个命令一个文档」系列,聚焦
ssh-keygen——安全加密与审计命令族(见安全加密与审计命令族),也属于远程访问工具链(见网络基础与远程访问命令族)。配置 SSH 免密登录,第一步就是它。
ssh-keygen 生成 SSH 用的密钥对(私钥 + 公钥),还能管理 known_hosts、authorized_keys、计算指纹等。它是搭建免密登录和安全运维的基础。
一、基本用法
bash
ssh-keygen -t ed25519 # 生成 Ed25519 密钥(现代推荐)
ssh-keygen -t rsa -b 4096 # 生成 4096 位 RSA(老系统兼容用)
ssh-keygen -t ed25519 -C "alice@laptop" # -C 加注释,便于辨识
ssh-keygen -f ~/.ssh/id_ed25519 # -f 指定密钥保存路径/文件名首选 Ed25519:密钥短、速度快、安全性高,现代 OpenSSH 都支持。只有要连老设备(不支持 Ed25519)才退用 RSA 4096。
-C注释只是个标签,方便日后在多把密钥里分清谁是谁,不影像安全。
二、免密登录的完整链路
bash
ssh-keygen -t ed25519 -f ~/.ssh/id_ed25519 # 1. 生成本地密钥对
ssh-copy-id user@host # 2. 把公钥推到远程(见 ssh-copy-id /linux/cmd/ssh-copy-id.md)
ssh user@host # 3. 直接登录,无需密码三步完成免密:
ssh-keygen造钥匙 → ssh-copy-id 把公钥装到远程authorized_keys→ 之后 ssh 自动用私钥认证。比每次输密码安全(私钥不出本机)也方便(脚本/自动化必备)。
三、指纹与 known_hosts
bash
ssh-keygen -l -f ~/.ssh/id_ed25519.pub # 显示公钥指纹(确认密钥身份)
ssh-keygen -R old-host # 从 known_hosts 删除某主机的旧记录(重装/换密钥后)
ssh-keygen -F host # 查 known_hosts 里有没有该主机首次连新主机时提示的"fingerprint"就是主机公钥指纹,用于确认"你连的确实是目标机器,不是中间人"。重装服务器后密钥变了,老记录会让你连不上,
ssh-keygen -R清掉旧条目再重连即可。
四、踩坑:权限太开放会被拒
bash
chmod 700 ~/.ssh
chmod 600 ~/.ssh/id_ed25519 # 私钥必须 600,否则 ssh 直接拒绝使用并报错SSH 对权限很苛刻:私钥文件必须是 600、
.ssh目录 700,否则 ssh 出于安全直接忽略私钥,退回让你输密码甚至报错。这是"配了密钥却还是要密码"的头号原因。
五、实战:为不同服务器用不同密钥
bash
ssh-keygen -t ed25519 -f ~/.ssh/id_github -C "github"
ssh-keygen -t ed25519 -f ~/.ssh/id_server -C "prod-server"
# 在 ~/.ssh/config 里用 IdentityFile 区分一句话总结
ssh-keygen = 造 SSH 密钥对:首选 -t ed25519,-C 加注释、-f 指定路径;配合 ssh-copy-id 完成免密登录。私钥务必 600 权限,否则 ssh 拒绝使用;-R 清 known_hosts 旧记录、-l -f 看指纹辨身份。远程连接见 ssh。