SSH 提交签名验证
Git 支持使用 GPG 来签名提交记录。但 GPG 用起来很复杂,一直赖得搞。Git 从 2.34 开始支持使用 SSH 签名,所以本文将介绍如何使用 SSH 对提交进行签名。
1 操作步骤
可以使用 SSH 通过自己生成的 SSH 密钥对提交进行签名。有关详细信息,请查看 user.Signingkey
的 Git 参考文档。如果已使用 SSH 密钥向 GitHub 进行了身份验证,还可以再次上传该相同密钥以用作签名密钥。可以添加到帐户的签名密钥数没有限制。
GitHub 使用 ssh_data(一种开放源代码 Ruby 库)来确认本地签名的提交和标记是否根据在 GitHub.com 上添加到帐户的公钥进行加密验证。
注意:SSH 签名验证可用于 Git 2.34 或更高版本。若要更新 Git 版本,请参阅 Git 网站。
要使用 SSH 对提交签名并在 GitHub 上验证这些提交,请执行以下步骤:
2 检查现有 SSH 密钥
打开终端。
输入
ls -al ~/.ssh
以查看是否存在现有的 SSH 密钥。1 2
# Lists the files in your .ssh directory, if they exist ls -al ~/.ssh
检查目录列表以查看是否已经有 SSH 公钥。默认情况下,GitHub 的一个支持的公钥的文件名是以下之一。
- id_rsa.pub
- id_ecdsa.pub
- id_ed25519.pub
3 生成新的 SSH 密钥
注意:GitHub 通过在 2022 年 3 月 15 日删除旧的、不安全的密钥类型来提高安全性。
自该日期起,不再支持 DSA 密钥 (ssh-dss
)。无法在 GitHub.com 上向个人帐户添加新的 DSA 密钥。
2021 年 11 月 2 日之前带有 valid_after
的 RSA 密钥 (ssh-rsa
) 可以继续使用任何签名算法。在该日期之后生成的 RSA 密钥必须使用 SHA-2 签名算法。一些较旧的客户端可能需要升级才能使用 SHA-2 签名。
打开终端。
粘贴下面的文本(替换为你的 GitHub 电子邮件地址)。
1
ssh-keygen -t ed25519 -C "your_email@example.com"
注意:如果你使用的是不支持 Ed25519 算法的旧系统,请使用以下命令:
1
ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
这将以提供的电子邮件地址为标签创建新 SSH 密钥。
1
> Generating public/private ALGORITHM key pair.
当系统提示你“Enter a file in which to save the key(输入要保存密钥的文件)”时,可以按 Enter 键接受默认文件位置。请注意,如果以前创建了 SSH 密钥,则 ssh-keygen 可能会要求重写另一个密钥,在这种情况下,我们建议创建自定义命名的 SSH 密钥。为此,请键入默认文件位置,并将 id_ssh_keyname 替换为自定义密钥名称。
1
> Enter a file in which to save the key (/Users/YOU/.ssh/id_ALGORITHM): [Press enter]
在提示符下,键入安全密码。有关详细信息,请参阅“使用 SSH 密钥密码”。
1 2
> Enter passphrase (empty for no passphrase): [Type a passphrase] > Enter same passphrase again: [Type passphrase again]
更多请查看 生成新的 SSH 密钥。
4 新增 SSH 密钥到 GitHub 帐户
注意:添加 SSH 密钥的类型选择 Signing Key
,细节略,详见 将 SSH 签名密钥添加到 GitHub 帐户。
5 将 SSH 密钥告知 Git
打开终端。
配置 Git 使用 SSH 对提交和标记签名:
1
git config --global gpg.format ssh
若要在 Git 中设置 SSH 签名密钥,请粘贴下面的文本,将
/PATH/TO/KEY.PUB
替换为要使用的公钥路径(例如:~/.ssh/id_ed25519.pub
)。1
git config --global user.signingkey /PATH/TO/.SSH/KEY.PUB
6 对提交签名
当本地分支中的提交更改时,可以将 -S
添加到 git commit
命令:
|
|
若要将 Git 客户端配置为默认对本地存储库的提交进行签名,请在 Git 版本 2.0.0 及更高版本中,运行:
|
|
要在计算机上的任何本地存储库中默认对所有提交进行签名,请运行:
|
|
在本地完成创建提交后,将其推送到 GitHub 上的远程仓库,在 GitHub 上查看提交记录就能看到 Verified
的标志了。
7 对标记签名
若要对标记进行签名,请将 -s
添加到 git tag
命令。
|
|
通过运行 git tag -v [tag-name]
验证已签名的标记。
|
|
或者,可以将 gpgsign
设置为 true
,以便在创建标记时自动对其进行签名:
|
|
8 其他
创建可信公钥列表文件:
|
|
可信公钥列表文件内容格式如下,每个公钥占一行:
|
|
例如,可以将 ~/.ssh/id_ed25519.pub
公钥复制然后粘贴:
|
|
|
|
将可信公钥列表文件路径添加到 Git 配置中:
|
|
本地查看提交日志签名状况:
|
|
相关内容
- Git 常用指令汇总
- 解决 SourceTree 提交时候 husky 命令失败问题
- Commit Message Spec
- Mac 上的开发配置总结
- Hugo 使用 GitHub Actions 部署到 GithHb Pages 和 腾讯云 cos 桶