使用 SSH keys 签名提交
- 版本: Free, Premium, Ultimate
- 提供方式: GitLab.com, GitLab Self-Managed, GitLab Dedicated
当您使用 SSH keys 签名提交时,GitLab 会使用与您的 GitLab 账户关联的 SSH 公钥来加密验证提交的签名。 如果验证成功,GitLab 会在该提交上显示一个 已验证 标签。
只要 SSH keys 的使用类型是 Authentication & Signing,您就可以将它们用于 git+ssh 认证和签名提交。
您可以在 向您的 GitLab 账户添加 SSH key 页面上进行验证。
有关管理与您的 GitLab 账户关联的 SSH keys 的更多信息,请参阅 使用 SSH keys 与 GitLab 通信。
配置 Git 使用您的 SSH key 签名提交
在您 创建 SSH key 并 将其添加到您的 GitLab 账户 或 使用密码管理器生成它 后,请配置 Git 以开始使用该 key。
前置条件:
-
Git 2.34.0 或更高版本。
-
OpenSSH 8.1 或更高版本。
OpenSSH 8.7 破坏了签名功能。如果您使用的是 OpenSSH 8.7,请升级到 OpenSSH 8.8。
-
一个 Usage type 为
Authentication & Signing或Signing的 SSH key。 支持以下 SSH key 类型:- ED25519
- RSA
- ECDSA
要配置 Git 使用您的 key:
-
配置 Git 使用 SSH 进行提交签名:
git config --global gpg.format ssh -
指定要用作签名公钥的 SSH key,并将文件名(
~/.ssh/examplekey.pub)更改为您的 key 的位置。文件名可能因您生成 key 的方式而异:git config --global user.signingkey ~/.ssh/examplekey.pub
使用您的 SSH key 签名提交
前置条件:
- 您已 创建 SSH key。
- 您已将 key 添加到您的 GitLab 账户。
- 您已 配置 Git 使用您的 SSH key 签名提交。
要对提交进行签名:
-
在签名提交时使用
-S标志:git commit -S -m "My commit msg" -
可选。如果您不想每次提交时都输入
-S标志,可以告诉 Git 自动为您签名提交:git config --global commit.gpgsign true -
如果您的 SSH key 受密码保护,Git 会提示您输入密码短语。
-
推送到 GitLab。
-
检查您的提交 是否已验证。 签名验证使用
allowed_signers文件将电子邮件与 SSH key 关联起来。 有关配置此文件的帮助,请阅读 本地验证提交。
验证提交
您可以在 GitLab UI 中验证所有类型的已签名提交。 使用 SSH key 签名的提交也可以在本地进行验证。
本地验证提交
要在本地验证提交,请创建一个 allowed signers file,以便 Git 将 SSH 公钥与用户关联起来:
-
创建一个 allowed signers 文件:
touch allowed_signers -
在 Git 中配置
allowed_signers文件:git config gpg.ssh.allowedSignersFile "$(pwd)/allowed_signers" -
将您的条目添加到 allowed signers 文件中。使用以下命令将您的电子邮件地址和 SSH 公钥添加到
allowed_signers文件中。将<MY_KEY>替换为您的 key 的名称,并将~/.ssh/allowed_signers替换为您的项目的allowed_signers文件的位置:# 根据您的需求修改此行。 # 声明 `git` 命名空间有助于防止跨协议攻击。 echo "$(git config --get user.email) namespaces=\"git\" $(cat ~/.ssh/<MY_KEY>.pub)" >> ~/.ssh/allowed_signersallowed_signers 文件中的最终条目包含您的电子邮件地址、key 类型和 key 内容,如下所示:
[email protected] namespaces="git" ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIAmaTS47vRmsKyLyK1jlIFJn/i8wdGQ3J49LYyIYJ2hv -
对您想要验证签名的每个用户重复上一步。如果您想为许多不同的贡献者本地验证签名,请考虑将此文件检入您的 Git 仓库。
-
使用
git log --show-signature查看提交的签名状态:$ git log --show-signature commit e2406b6cd8ebe146835ceab67ff4a5a116e09154 (HEAD -> main, origin/main, origin/HEAD) [email protected] 的 "git" 签名有效,使用的是 ED25519 key,SHA256:Ar44iySGgxic+U6Dph4Z9Rp+KDaix5SFGFawovZLAcc 作者: John Doe <[email protected]> 日期: 2022年11月29日 06:54:15 -0600 SSH 签名的提交
已移除 SSH key 的已签名提交
您可以撤销或删除用于签名的 SSH keys。更多信息请参阅 移除 SSH key。
移除您的 SSH key 可能会影响使用该 key 签名的任何提交:
- 撤销您的 SSH key 会将您之前的提交标记为 未验证。在您添加新的 SSH key 之前,任何新的提交也会被标记为 未验证。
- 删除您的 SSH key 不会影响您之前的提交。在您添加新的 SSH key 之前,任何新的提交都会被标记为 未验证。