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 = 亲笔签名 / 公章

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

相关推荐
wanhengidc21 小时前
云手机 高振畅玩不踩坑
运维·服务器·安全·web安全·智能手机
有谁看见我的剑了?21 小时前
linux 添加硬盘后系统识别不到硬盘处理
linux·运维·服务器
JoyCong199821 小时前
ToDesk远程屏幕墙技术白皮书:如何重塑全局运维视界
运维·电脑·远程工作
偶尔上线经常挺尸1 天前
《100个“反常识”经验15:Nginx 502排查:从应用到内核》
运维·nginx·性能调优·反向代理·502错误·http排错
思茂信息1 天前
CST软件如何进行参数化扫描?
运维·开发语言·javascript·windows·ecmascript·软件工程·软件需求
计算机安禾1 天前
【Linux从入门到精通】第31篇:防火墙漫谈——iptables与firewalld防护指南
linux·运维·php
习惯就好zz1 天前
Git 交互式 rebase 实战:将后续修改合并到历史提交
git
下一页盛夏花开1 天前
ubuntu 20中安装QT以后出现红色空心断点
linux·运维·ubuntu
sxgzzn1 天前
光伏数智化综合平台:让光伏电站运维更智能、更高效
运维