一、核心对比表
| 维度 | 🔑 SSH 密钥 | ✍️ GPG 密钥 | 🎫 私人令牌 |
|---|---|---|---|
| 本质 | 密钥对(公钥+私钥) | 密钥对(公钥+私钥) | 一串随机字符串 |
| 作用 | 免密 push/pull 的身份认证 | 给 commit 签名,证明是你提交的 | 代替密码认证 / 调 API |
| 生成位置 | 本地终端 ssh-keygen |
本地终端 gpg |
Gitee 网页上生成 |
| 配到 Gitee | 上传公钥 | 上传公钥 | 无需上传,网页直接生成 |
| 怎么用 | 远程地址用 SSH 形式 | 配置 git 后每次提交自动签名 | 密码栏填 token / API 请求头 |
| 秘密部分 | 私钥留本地 | 私钥留本地 | 整串都是秘密 |
| 能否"登录" | ✅ 能 | ❌ 不能 | ✅ 能(代替密码) |
二、分别怎么生成、怎么用
🔑 SSH 密钥
# 生成(本地)
ssh-keygen -t ed25519 -C "你的邮箱@example.com"
# 生成两个文件:~/.ssh/id_ed25519(私钥,留在本地)和 id_ed25519.pub(公钥)
配到 Gitee :cat ~/.ssh/id_ed25519.pub 复制 → Gitee 设置 → 安全设置 → SSH公钥 → 粘贴。
使用:远程地址换成 SSH 形式,push 自动认证:
git remote set-url origin git@gitee.com:用户名/仓库.git
git push # 不再问密码
✍️ GPG 密钥
# 生成(本地)
gpg --full-generate-key # 姓名/邮箱要和 Gitee 账号一致
gpg --list-secret-keys --keyid-format=long # 记下 key ID(如 ABCD1234EFGH5678)
gpg --armor --export ABCD1234EFGH5678 # 导出公钥
配到 Gitee :复制导出内容 → Gitee 设置 → 安全设置 → GPG公钥 → 粘贴。
使用:配置 git 后,每次提交自动签名:
git config --global user.signingkey ABCD1234EFGH5678
git config --global commit.gpgsign true
git commit -m "..." # 提交自动带签名,Gitee 显示绿色「已验证」
🎫 私人令牌
生成 :Gitee 网页 → 设置 → 安全设置 → 私人令牌 → 生成新令牌(勾权限范围,⚠️只显示一次)。
使用(两种):
# 1) HTTPS push 时,密码栏填令牌
git push
# Username: 用户名 / Password: 粘贴令牌
# 2) 调 API
curl -H "Authorization: token 你的令牌" https://gitee.com/api/v5/user
三、一句话记忆
| 想要什么 | 用什么 |
|---|---|
| push 时免输密码 | SSH 密钥 |
| 让提交防伪造(绿色已验证) | GPG 密钥 |
| 临时/受限的密码替代品、调 API | 私人令牌 |
关键区别再强调一遍:SSH 和 GPG 都是「本地生成密钥对、只上传公钥、私钥留本机」;私人令牌则是「网页直接生成一整个秘密字符串」,没有公私钥之分。