示例命令:
ssh-keygen\-ted25519\-a100\-f~/.ssh/github\-C"your@email.com"ssh-keygen\-ted25519\-a100\-f~/.ssh/github\-C"Github username:sha******ng0907, Email: suns*****adu@gmail.com"文章目录
- SSH Keygen 使用指南:SSH 密钥生成与管理详解
- 什么是 ssh-keygen?
- SSH 密钥认证原理
- ssh-keygen 基本语法
- 查看已有密钥
- 选择密钥算法
- Ed25519(推荐)
- RSA
- ECDSA
- DSA
- 常用参数详解
- `-t`指定算法
- `-b`指定密钥长度
- `-f`指定文件名
- `-C`添加备注信息
- `-t`设置密码保护
- `-p`修改密钥密码
- `cat`查看公钥内容
- `-lf`查看密钥指纹
- `-lvf`查看随机图案(ASCII Art)
- 生成 GitHub 专用密钥
- 生成服务器专用密钥
- 步骤
- 生成(本地操作):
- 上传公钥:
- 详细解释
- 🔑 第一步:生成「服务器专用密钥」(本地操作)
- 📤 第二步:上传公钥到服务器(两种方法选一种)
- 方法 1:自动上传(推荐)
- 方法 2:手动上传(适合不能用 `ssh-copy-id` 的情况)
- 📋 第三步:复制到服务器(其实就是「确认公钥生效」)
- 🌰 举个生活例子
- ❓ 常见问题
- ✅ 总结流程
- 在`~/.ssh/config`文件中添加密钥信息
- 测试生成的密钥(ssh -T git@github.com)
- `-N`生成无需密码的自动化密钥
- `-A`生成主机密钥
- `-m`转换密钥格式
- `rm`删除本地SSH密钥文件
- `-R`删除本地主机指纹
- 常见使用场景
- GitHub
- GitLab
- 云服务器登录
- 自动部署
- 跳板机认证
- 企业内部多个身份
- 最佳实践建议(`-a`增加密钥派生计算次数)
- 总结
SSH Keygen 使用指南:SSH 密钥生成与管理详解
什么是 ssh-keygen?
ssh-keygen是 OpenSSH 提供的密钥生成工具,用于创建、管理和维护 SSH 密钥对。
SSH 密钥是现代 Linux 运维、Git 仓库认证、服务器登录以及自动化部署中的基础设施之一。
与传统密码登录相比,SSH 密钥认证具有:
- 更高的安全性
- 无需频繁输入密码
- 支持自动化脚本执行
- 可与 GitHub、GitLab 等代码托管平台集成
- 支持数字签名和身份认证
几乎所有基于 SSH 的认证体系,都离不开ssh-keygen。
SSH 密钥认证原理
SSH 采用非对称加密机制。
生成密钥时会得到两个文件:
私钥(Private Key) ↓ id_ed25519 公钥(Public Key) ↓ id_ed25519.pub其中:
- 私钥保存在本地,绝不能泄露
- 公钥可以安全地分发给服务器
认证过程如下:
客户端 │ ├── 持有私钥 │ └── 请求连接服务器 服务器 │ ├── 保存用户公钥 │ └── 发送随机挑战 客户端 │ └── 使用私钥签名 服务器 │ └── 使用公钥验证签名 验证成功 ↓ 允许登录整个过程无需传输密码。
即使攻击者获取了网络流量,也无法推导出私钥。
ssh-keygen 基本语法
ssh-keygen[选项]最常见的形式:
ssh-keygen-ted25519执行后:
Generating public/private ed25519 key pair. Enter file in which to save the key (/home/user/.ssh/id_ed25519): Enter passphrase: Enter same passphrase again:passphrase(密码短语)的作用:
为你的SSH私钥文件(如id_ed25519)提供额外的安全保护,即使别人获取了你的私钥文件,没有passphrase也无法使用
随后会生成:
~/.ssh/id_ed25519 ~/.ssh/id_ed25519.pub查看已有密钥
ls~/.ssh例如:
id_ed25519 id_ed25519.pub id_rsa id_rsa.pub known_hosts config authorized_keys选择密钥算法
SSH 支持多种算法。
Ed25519(推荐)
ssh-keygen-ted25519特点:
- 速度快
- 密钥短
- 安全性高
- 当前 OpenSSH 默认推荐方案
生成结果:
id_ed25519 id_ed25519.pub适用于:
- GitHub
- GitLab
- 云服务器
- 日常开发
这是目前最推荐使用的算法。
RSA
ssh-keygen-trsa-b4096参数说明:
-t rsa 指定 RSA 算法 -b 4096 密钥长度输出:
id_rsa id_rsa.pub推荐至少:
-b3072或者:
-b4096优点:
- 兼容性最好
缺点:
- 密钥较大
- 计算效率较低
ECDSA
ssh-keygen-tecdsa-b521较少使用。
主要用于某些特殊兼容场景。
DSA
ssh-keygen-tdsa已经基本废弃。
OpenSSH 已不建议继续使用。
常用参数详解
-t指定算法
-t例如:
ssh-keygen-ted25519-b指定密钥长度
-b例如:
ssh-keygen-trsa-b4096-f指定文件名
默认保存:
~/.ssh/id_ed25519自定义:
ssh-keygen-ted25519-f~/.ssh/github生成:
github github.pub适合:
GitHub GitLab 公司服务器 生产环境 测试环境分别维护独立密钥。
-C添加备注信息
-C例如:
ssh-keygen-ted25519\-C"arnold@example.com"查看公钥:
ssh-ed25519 AAAAC3Nza... arnold@example.com通常填写:
邮箱 机器名 用途说明例如:
ssh-keygen-C"github-personal"ssh-keygen-C"prod-server"ssh-keygen-C"macbook-air"-t设置密码保护
ssh-keygen-ted25519系统会提示:
Enter passphrase:密码用于保护私钥。
即使私钥文件泄露:
id_ed25519攻击者也无法直接使用。
推荐:
生产环境 个人电脑 长期使用密钥都设置 Passphrase。
-p修改密钥密码
ssh-keygen-p指定文件:
ssh-keygen-p-f~/.ssh/id_ed25519流程:
输入旧密码 输入新密码 确认新密码cat查看公钥内容
cat~/.ssh/id_ed25519.pub输出:
ssh-ed25519 AAAAC3NzaC... user@example.com复制后添加到:
- GitHub SSH Keys
- GitLab SSH Keys
- 云服务器
- 跳板机
-lf查看密钥指纹
ssh-keygen-lf~/.ssh/id_ed25519.pub输出:
256 SHA256:xxxxxxxxxxx user@example.com常用于:
- 校验密钥
- 比对服务器指纹
- 安全审计
-lvf查看随机图案(ASCII Art)
ssh-keygen-lvf~/.ssh/id_ed25519.pub输出:
+--[ED25519 256]--+ | .+=o. | | .o==+ | |..+*=. | |o*+= | +-----------------+这是 OpenSSH 提供的视觉指纹。
便于人工比较密钥。
生成 GitHub 专用密钥
例如:
ssh-keygen\-ted25519\-C"github"\-f~/.ssh/github配置 SSH:
nano~/.ssh/configHost github.com HostName github.com User git IdentityFile ~/.ssh/github测试连接:
ssh-Tgit@github.com成功后会看到:
Hi username! You've successfully authenticated.生成服务器专用密钥
步骤
生成(本地操作):
ssh-keygen\-ted25519\-f~/.ssh/prod上传公钥:
用命令上传:
ssh-copy-id-i~/.ssh/prod.pub root@server或者:
查看:
catprod.pub然后复制到服务器此文件中:
~/.ssh/authorized_keys详细解释
🔑 第一步:生成「服务器专用密钥」(本地操作)
ssh-keygen\-ted25519\-f~/.ssh/prod这是在你自己的电脑上执行的命令(不是服务器!)
✅作用:生成一对「密钥」(私钥 + 公钥)
-t ed25519:指定加密算法(现在最安全的算法之一)-f ~/.ssh/prod:指定私钥保存路径(生成后会同时生成prod(私钥)和prod.pub(公钥))
➡️结果:- 私钥文件:
~/.ssh/prod(你自己电脑上,绝对不能泄露) - 公钥文件:
~/.ssh/prod.pub(可以公开给服务器用)
- 私钥文件:
📤 第二步:上传公钥到服务器(两种方法选一种)
方法 1:自动上传(推荐)
ssh-copy-id-i~/.ssh/prod.pub root@server✅作用:自动把你的公钥(prod.pub)发送到服务器
-i ~/.ssh/prod.pub:指定你要上传的公钥路径root@server:服务器的登录地址(root是用户名,server是服务器 IP/域名)
➡️背后发生了什么:
这个命令会自动把公钥内容追加到服务器的~/.ssh/authorized_keys文件里(相当于把你的「公钥指纹」登记到服务器的「白名单」中)
方法 2:手动上传(适合不能用ssh-copy-id的情况)
catprod.pub✅作用:显示公钥内容(在你电脑上执行)
- 执行后会打印出一长串类似
ssh-ed25519 AAAAC3...的字符
➡️操作步骤:- 复制这串字符(就是
prod.pub的内容) - 登录服务器(用密码登录)
- 手动把这串字符粘贴到服务器的
~/.ssh/authorized_keys文件里(如果文件不存在,就新建)
- 复制这串字符(就是
📋 第三步:复制到服务器(其实就是「确认公钥生效」)
~/.ssh/authorized_keys✅作用:这是服务器上存储「允许登录的公钥」的文件
- 你第二步上传的公钥(
prod.pub的内容),最终要放到这个文件里 - 服务器每次收到 SSH 登录请求时,会检查这个文件,确认你的私钥是否匹配
🌰 举个生活例子
想象你要进公司大楼:
1️⃣生成密钥→ 你去办了一张「电子门禁卡」(私钥) + 一张「卡的复印件」(公钥)
2️⃣上传公钥→ 把「卡的复印件」交给公司前台登记(登记到门禁系统authorized_keys里)
3️⃣登录服务器→ 以后你用「电子门禁卡」(私钥)就能直接刷门禁,不用输密码了 ✅
❓ 常见问题
Q:私钥和公钥啥区别?
→ 私钥(prod)是你自己藏好的「钥匙」,公钥(prod.pub)是给服务器的「锁的型号」,服务器用公钥验证你的私钥是否合法。Q:为什么不用密码登录?
→ 密码容易被暴力破解,用密钥登录更安全(且可以设置免密登录,自动化运维更方便)。Q:
~/.ssh/authorized_keys不存在怎么办?
→ 服务器上手动创建目录和文件:mkdir-p~/.ssh&&touch~/.ssh/authorized_keyschmod700~/.ssh&&chmod600~/.ssh/authorized_keys
✅ 总结流程
- 本地生成密钥→ 得到
prod(私钥)和prod.pub(公钥) - 上传公钥→ 把
prod.pub的内容放到服务器的authorized_keys里 - 以后登录服务器→ 用私钥
prod就能免密登录(比如ssh -i ~/.ssh/prod root@server)
这样设置后,你就可以用私钥prod直接登录服务器,不用每次输密码啦! 🔒
在~/.ssh/config文件中添加密钥信息
如:
vim~/.ssh/config测试生成的密钥(ssh -T git@github.com)
ssh-Tgit@github.com或者直接ssh -T github.com使用前面配置的host别名
-N生成无需密码的自动化密钥
CI/CD 场景:
ssh-keygen\-ted25519\-N""\-fdeploy_key其中:
-N""表示空密码。
适用于:
- GitHub Actions
- Jenkins
- Kubernetes Job
- 自动部署脚本
但安全性会有所下降。
-A生成主机密钥
服务器初始化时:
ssh-keygen-A会自动生成:
ssh_host_rsa_key ssh_host_ecdsa_key ssh_host_ed25519_key这些文件通常位于:
/etc/ssh/供 SSH 服务端使用。
-m转换密钥格式
OpenSSH 私钥:
BEGIN OPENSSH PRIVATE KEY转换 PEM:
ssh-keygen-p\-mPEM\-fid_rsa转换后:
BEGIN RSA PRIVATE KEY常用于:
- 某些旧系统
- 第三方工具兼容
- 云平台导入
rm删除本地SSH密钥文件
# 删除私钥文件 rm ~/.ssh/id_rsa # 删除公钥文件 rm ~/.ssh/id_rsa.pub-R删除本地主机指纹
当服务器重装后:
WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED可以执行:
ssh-keygen-Rserver.com或者:
ssh-keygen-R192.168.1.10自动删除:
~/.ssh/known_hosts中的旧记录。
常见使用场景
GitHub
ssh-keygen-ted25519-C"github"GitLab
ssh-keygen-ted25519-C"gitlab"云服务器登录
ssh-keygen-ted25519自动部署
ssh-keygen-N""跳板机认证
ssh-keygen-fbastion企业内部多个身份
~/.ssh/work ~/.ssh/personal ~/.ssh/github ~/.ssh/prod配合:
~/.ssh/config实现多身份管理。
最佳实践建议(-a增加密钥派生计算次数)
当前最推荐的生成方式:
ssh-keygen\-ted25519\-a100\-C"your@email.com"参数:
-a 100表示增加密钥派生计算次数,提高抵抗暴力破解能力。
建议:
| 场景 | 推荐算法 |
|---|---|
| 个人开发 | Ed25519 |
| GitHub | Ed25519 |
| GitLab | Ed25519 |
| Linux 服务器 | Ed25519 |
| 老旧设备兼容 | RSA 4096 |
| 自动化部署 | Ed25519(可无密码) |
总结
ssh-keygen是 SSH 生态中最核心的工具之一。
它不仅用于生成 SSH 登录密钥,也广泛应用于:
- Git 身份认证
- 服务器免密登录
- 自动化部署
- 数字签名
- 主机身份验证
- 企业级访问控制
对于绝大多数场景,推荐采用:
ssh-keygen-ted25519-a100-C"user@example.com"这种方式兼顾了安全性、性能以及未来兼容性,是当前 OpenSSH 社区最推荐的实践方案。