当前位置: 首页 > news >正文

为什么设置 git commit签名是公钥而不是私钥?

下面是Github的文档,为什么设置 SSH 签名密钥是公钥而不是私钥?

将 SSH 密钥告知 Git
可以使用现有 SSH 密钥对提交和标记进行签名,或生成专用于签名的新密钥。 有关详细信息,请参阅“生成新的
SSH 密钥并将其添加到 ssh-agent”。

注意!!SSH 签名验证可用于 Git 2.34 或更高版本。 若要更新 Git 版本,请参阅 Git 网站。

  1. 打开终端。

  2. 配置 Git 使用 SSH 对提交和标记签名:
    git config --global gpg.format ssh

  3. 若要在 Git 中设置 SSH 签名密钥,请粘贴下面的文本,将
    /PATH/TO/.SSH/KEY.PUB 替换为要使用的公钥路径:
    git config --global user.signingkey /PATH/TO/.SSH/KEY.PUB

你提到的 GitHub 文档中,确实是让你设置公钥路径作为 Git 的 user.signingkey,很多人会疑惑:不是应该使用私钥签名吗?为什么要设置公钥?

这个问题的关键在于 你设置的是 “用于标识签名者的身份”,而真正用来做签名的仍然是私钥,只是它不需要你手动设置


✅ 为什么设置公钥而不是私钥?

  • 签名操作用的是私钥,这个私钥应该已经被你放在 ~/.ssh 中,并且由 ssh-agent 管理。

  • Git 配置中设置的是 “用于识别你的公钥”,也就是告诉 Git:

    “这个是我用来签名的私钥对应的公钥,请用这个公钥计算指纹,写入到签名信息中。”

这样,GitHub 在验证签名时可以:

  1. 从 Git 提交中读取签名信息和声明使用的公钥指纹。
  2. 用你上传到 GitHub 的公钥比对这个指纹。
  3. 如果匹配上了,就认定这个提交是你签的。

🔐 私钥在哪里?

私钥从不应该出现在 Git 配置中,出于安全原因。正确的做法是:

  • 私钥保存在本地 ~/.ssh/id_ed25519(或你自定义生成的)。
  • 它被 ssh-agent 加载(你可以用 ssh-add 加入)。
  • Git 会自动调用 ssh-agent 中的私钥来做签名。

⚙️ 总结

项目内容
签名用的是私钥(由 ssh-agent 管理)
Git 配置的是公钥路径(用于识别签名用的密钥)
GitHub 验证方式从你设置的 signingkey 获取指纹,匹配 GitHub 上传的公钥
为什么不用私钥因为私钥必须保密,不应写入配置或上传

如果你还没生成或配置 SSH 密钥用于签名,可以参考这一步(生成只用于签名的新密钥):

ssh-keygen -t ed25519 -C "signing key" -f ~/.ssh/id_ed25519_signing
ssh-add ~/.ssh/id_ed25519_signing

然后设置签名:

git config --global gpg.format ssh
git config --global user.signingkey ~/.ssh/id_ed25519_signing.pub

你还需要把公钥 .pub 添加到 GitHub 的「SSH and GPG keys → SSH Signing Keys」里。

http://www.lryc.cn/news/597140.html

相关文章:

  • yo easy-ui5生成项目,ui5版本降级处理
  • Tang Prime 20K板I2S输入输出例程
  • Hexo - 免费搭建个人博客01 - 安装软件工具
  • Java应用程序内存占用分析
  • 大致自定义文件I/O库函数的实现详解(了解即可)
  • 软件开发、项目开发基本步骤
  • Java从入门到精通!第十二天(泛型)
  • 搭建 Android 开发环境JAVA+AS
  • 阿里云ODPS十五周年重磅升级发布:为AI而生的数据平台
  • HTTP性能优化终极指南:从协议原理到企业级实践
  • k8s pvc是否可绑定在多个pod上
  • 【Kubernetes】集群启动nginx,观察端口映射,work节点使用kubectl配置
  • 优化 Elasticsearch JVM 参数配置指南
  • 每日一算:华为-批萨分配问题
  • 谷粒商城篇章13--P340-P360--k8s/KubeSphere【高可用集群篇一】
  • 常用的正则表达式
  • 代码随想录算法训练营第五十二天|图论part3
  • 图论的题目整合(Dijkstra)
  • 【图论,拓扑排序】P1347 排序
  • 算法竞赛备赛——【图论】最小生成树
  • Modbus协议详解与c#应用
  • 算法竞赛备赛——【图论】拓扑排序
  • CI/CD与DevOps集成方法
  • python在windows电脑找回WiFi密码
  • 【按下电源键后,电脑里发生了什么?——BIOS:启动世界的“第一把钥匙”】
  • C++编程学习(第14天)
  • [Mediatek] MTK openwrt-21.02 wifi 没启动问题
  • 详述消息队列kafka
  • 【通识】手机和芯片相关
  • LazyVim 加载顺序