Help us learn about your current experience with the documentation. Take the survey.

使用 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 typeAuthentication & SigningSigning 的 SSH key。 支持以下 SSH key 类型:

    • ED25519
    • RSA
    • ECDSA

要配置 Git 使用您的 key:

  1. 配置 Git 使用 SSH 进行提交签名:

    git config --global gpg.format ssh
  2. 指定要用作签名公钥的 SSH key,并将文件名(~/.ssh/examplekey.pub)更改为您的 key 的位置。文件名可能因您生成 key 的方式而异:

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

使用您的 SSH key 签名提交

前置条件:

要对提交进行签名:

  1. 在签名提交时使用 -S 标志:

    git commit -S -m "My commit msg"
  2. 可选。如果您不想每次提交时都输入 -S 标志,可以告诉 Git 自动为您签名提交:

    git config --global commit.gpgsign true
  3. 如果您的 SSH key 受密码保护,Git 会提示您输入密码短语。

  4. 推送到 GitLab。

  5. 检查您的提交 是否已验证。 签名验证使用 allowed_signers 文件将电子邮件与 SSH key 关联起来。 有关配置此文件的帮助,请阅读 本地验证提交

验证提交

您可以在 GitLab UI 中验证所有类型的已签名提交。 使用 SSH key 签名的提交也可以在本地进行验证。

本地验证提交

要在本地验证提交,请创建一个 allowed signers file,以便 Git 将 SSH 公钥与用户关联起来:

  1. 创建一个 allowed signers 文件:

    touch allowed_signers
  2. 在 Git 中配置 allowed_signers 文件:

    git config gpg.ssh.allowedSignersFile "$(pwd)/allowed_signers"
  3. 将您的条目添加到 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_signers

    allowed_signers 文件中的最终条目包含您的电子邮件地址、key 类型和 key 内容,如下所示:

    [email protected] namespaces="git" ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIAmaTS47vRmsKyLyK1jlIFJn/i8wdGQ3J49LYyIYJ2hv
  4. 对您想要验证签名的每个用户重复上一步。如果您想为许多不同的贡献者本地验证签名,请考虑将此文件检入您的 Git 仓库。

  5. 使用 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 之前,任何新的提交都会被标记为 未验证

相关主题