Featured image of post 使用 SSH 密钥代替 GPG 密钥进行 Git 提交签名Featured image of post 使用 SSH 密钥代替 GPG 密钥进行 Git 提交签名

使用 SSH 密钥代替 GPG 密钥进行 Git 提交签名

直接配置 SSH 密钥以轻松签署和验证存储库主机上的 git 提交。

长期以来,GPG(GNU Privacy Guard)密钥是签署 Git 提交以证明身份并防止篡改的行业标准。然而,设置 GPG 涉及生成密钥环、管理过期日期和调试后台代理,这给开发人员带来了很大的麻烦。

为了消除这种复杂性,Git 2.34 版本引入了使用现有 SSH 密钥直接签署提交的功能,从而绕过了 GPG 密钥的需要。

在本指南中,我们将探讨如何配置 Git 以使用 SSH 密钥来签署提交、在本地验证密钥以及启用跨开发团队的信任关系。


1. 为什么从 GPG 切换到 SSH 密钥?

  • 无密钥冗余:您可以重复使用已用于通过 GitHub 进行身份验证的相同 SSH 密钥(例如 id_ed25519),从而使您无需生成和维护单独的 GPG 密钥对。
  • 更简单的设置:只需要几个终端命令即可运行。
  • 更干净的备份:标准 SSH 密钥重量轻,易于迁移,并且受到现代终端 shell 的原生支持。

2. 配置 Git 使用 SSH 密钥签名

第 1 步:将加密格式设置为 SSH

告诉 Git 使用 SSH 而不是 GPG 进行提交签名:

git config --global gpg.format ssh

第 2 步:关联您的 SSH 公钥

将 Git 指向您的 SSH 公钥文件(通常位于 ~/.ssh 目录中的 id_ed25519.pubid_rsa.pub):

git config --global user.signingkey ~/.ssh/id_ed25519.pub

第 3 步:启用全局签名

确保 Git 自动签署每个提交:

git config --global commit.gpgsign true

3.本地验证同事的SSH签名

虽然 GitHub 在您将公钥注册为“签名密钥”后会自动验证您的 SSH 签名提交,但通过 git log --show-signature 在终端本地验证签名需要设置 allowed_signers 文件。

第 1 步:创建允许的签名者文件

创建全局配置文件以将电子邮件地址映射到受信任的公钥:

touch ~/.config/git/allowed_signers

第 2 步:填充文件

按以下格式添加团队成员的电子邮件和公钥:

# <email> namespaces="git" <SSH public key>
[email protected] namespaces="git" ssh-ed25519 AAAAC3NzaC1...
[email protected] namespaces="git" ssh-ed25519 AAAAC3NzaC1...

第 3 步:将文件链接到 Git 配置

git config --global gpg.ssh.allowedSignersFile ~/.config/git/allowed_signers

现在,在本地计算机上运行 git log --show-signature 将交叉引用此文件并将来自 Alice 或 Bob 的签名报告为可信。


结论

利用 SSH 密钥进行 Git 签名是保护项目提交历史记录的高效方法。

  1. 配置 gpg.format ssh 以使用您现有的凭据。
  2. 在 GitHub 上将密钥注册为“签名密钥”以显示绿色验证徽章。
  3. 使用 allowedSignersFile 配置在团队内建立本地信任圈。

立即采用 SSH 签名,以最小的配置开销升级存储库的安全状态。