使用 SSH 签名 Git 提交记录

在本地签署提交和标签,让其他人对所做更改的源充满信心。 如果提交或标记具有可加密验证的 GPG、SSH、 或 S/MIME 签名,GitHub 会将提交或标记标示为“已验证”或“部分验证”。

对于大多数个人用户,GPG 或 SSH 会是对提交进行签名的最佳选择。 在较大型组织的环境中通常需要 S/MIME 签名。 SSH 签名是最容易生成的。 甚至可以将现有身份验证密钥上传到 GitHub 以用作签名密钥。 生成 GPG 签名密钥比生成 SSH 密钥更复杂,但 GPG 具有 SSH 所没有的功能。 GPG 密钥可以在不再使用时过期或撤销。 GitHub 将已使用此类密钥进行签名的提交显示为“已验证”,除非密钥标记为已泄露。 SSH 密钥没有此功能。

GitHub 早已正式支持 SSH 签名。今天就把相关的内容整理分享一下。

Git 2.34 或更高版本可用于 SSH 签名验证。

可以使用 SSH 通过自己生成的 SSH 密钥对提交进行签名。 如果已使用 SSH 密钥向 GitHub 进行了身份验证,还可以再次上传该相同密钥以用作签名密钥。 添加到帐户的签名密钥数没有限制。

将SSH 签名密钥添加到 Github 账户

打开 Github 账户的密钥添加页面, Key type 选择 Signing Key,填写公钥。

add sign key

添加完后 SSH Keys页面如下所示

ssh keys

SSH 签名配置

1
2
3
4
5
6
7
# 使用 SSH 签名
git config --global gpg.format ssh
# 指定 SSH 签名使用文件
git config --global user.signingKey ~/.ssh/id_ed25519.pub
# 开启自动签名
git config --global commit.gpgsign true
git config --global tag.gpgsign true

验证

使用 SSH 提交之后就会出现 Verified 标志

verified