SSH Key 与 GPG Key 区别详解:Git 使用中的身份与签名机制

一、先给结论(重点)

SSH key 和 GPG key 都不是"必须同时配置"
但它们的功能几乎不重叠,是做两件完全不同的事

实际使用建议:

  • SSH key:几乎所有开发者都必须配置
  • GPG key:只有在"需要提交可信度或签名"的情况下才配置

二、一张表看懂 SSH key 与 GPG key

维度 SSH key GPG key
解决的问题 你是谁?你有没有权限? 这次提交是不是你本人写的?
用在 Git 的位置 clone / pull / push commit / tag 签名
是否参与网络连接 ✅ 是(建立 SSH 连接) ❌ 否(只对数据进行签名)
没有它会怎样 无法拉取或推送代码 能用 Git,但提交不"可信"
GitLab/GitHub 必需性 ✅ 是 ❌ 否
常见错误提示 Permission denied (publickey) gpg failed to sign the data
是否能互相替代 ❌ 完全不能 ❌ 完全不能

三、用一句人话理解区别

SSH key = 门禁卡

  • 作用:验证你能不能进入 Git 仓库

  • 特点

    • 没有它就无法 clone / pull / push
    • 连接层的身份认证
  • 类比:就像公司大楼的门禁卡,你没卡就进不去办公楼


GPG key = 亲笔签名 / 公章

  • 作用:验证提交内容是否真的来自你本人

  • 特点

    • 提交可以照样被 Git 接收,但不显示"Verified"标志
    • 内容层的真实性校验
  • 类比:就像在文件上签名或盖章,别人可以确认是你签的,而不是别人伪造


四、为什么它们看起来有重叠?

很多新手误解在于:

  • 两者都叫 key
  • 都跟 Git 有关

但核心区别在于信任对象不同

  • SSH key → 服务器信任你
  • GPG key → 其他开发者信任你的提交内容

信任的方向不同,所以功能完全不重叠。


五、到底需不需要两个都配置?

大部分开发者情况

情况 建议配置
公司 GitLab / GitHub ✅ SSH key
私有项目 / 日常开发 SSH key 即可
开源项目 / 安全要求高 SSH + GPG
需要显示提交 Verified 必须 GPG

总结:

  • 90% 开发者只需 SSH key
  • GPG key 是可选增强安全措施

遇到实际问题的判断

如果你在执行 git pushgit pull 时遇到:

复制代码
Permission denied (publickey)

说明:

  • 缺 SSH key 或配置不对
  • GPG key 对这个问题完全没帮助

正确组合应为:

复制代码
SSH key → 用来 clone / pull / push
GPG key → 用来 sign commit(可选)

六、SSH key 与 GPG key 的使用流程

SSH key 流程

  1. 生成 SSH key(ssh-keygen
  2. 将公钥添加到 Git 服务器(GitHub/GitLab)
  3. 使用 SSH 协议 clone / push / pull
  4. SSH 自动完成身份验证

GPG key 流程

  1. 生成 GPG key(gpg --full-generate-key

  2. 将公钥上传到 Git 服务器

  3. 配置 Git 使用该 GPG key 签名提交:

    bash 复制代码
    git config --global user.signingkey <GPG_KEY_ID>
    git commit -S -m "Your commit message"
  4. 其他人拉取代码时可验证签名真实性


七、总结一句话

SSH key 解决"我能不能访问仓库"
GPG key 解决"这次提交是不是我本人写的"

换句话说:

  • SSH key = 门禁卡
  • GPG key = 亲笔签名 / 公章

理解了这一点,再也不会混淆,也能根据自己的需求灵活配置。

相关推荐
闲云一鹤8 小时前
Git LFS 扫盲教程 - 你不会还在用 Git 管理大文件吧?
前端·git·前端工程化
碳基沙盒2 天前
OpenClaw 多 Agent 配置实战指南
运维
vibecoding日记3 天前
为什么我就想要「线性历史 + Signed Commits」,GitHub 却把我当猴耍 🤬🎙️
git·编程工具
程序员小崔日记4 天前
如何将代码轻松上传到 Gitee?Git 使用全攻略!
git·gitee·上传
蝎子莱莱爱打怪4 天前
Centos7中一键安装K8s集群以及Rancher安装记录
运维·后端·kubernetes
埃博拉酱4 天前
VS Code Remote SSH 连接 Windows 服务器卡在"下载 VS Code 服务器":prcdn DNS 解析失败的诊断与 BITS 断点续传
windows·ssh·visual studio code
Bigger5 天前
为什么你的 Git 提交需要签名?—— Git Commit Signing 完全指南
git·开源·github
DianSan_ERP5 天前
电商API接口全链路监控:构建坚不可摧的线上运维防线
大数据·运维·网络·人工智能·git·servlet
呉師傅5 天前
火狐浏览器报错配置文件缺失如何解决#操作技巧#
运维·网络·windows·电脑