长期以来,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.pub 或 id_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 签名是保护项目提交历史记录的高效方法。
- 配置
gpg.format ssh以使用您现有的凭据。 - 在 GitHub 上将密钥注册为“签名密钥”以显示绿色验证徽章。
- 使用
allowedSignersFile配置在团队内建立本地信任圈。
立即采用 SSH 签名,以最小的配置开销升级存储库的安全状态。

