如何使用现有的 ssh 密钥签署 git 提交

6 git ssh gnupg

根据 git,您现在可以使用现有的 ssh 密钥对提交进行签名。

https://github.blog/2021-11-15-highlights-from-git-2-34/#tidbits

接下来:https://unix.stackexchange.com/questions/269188/use-my-ssh-key-to-sign-git-commits

我也一直在浏览这个文档: https: //git-scm.com/docs/git-config#Documentation/git-config.txt-gpgprogram,但目前还不清楚如何使用它。

我已将 gpg 格式设置为 ssh 并将签名设置为 true,因此目前它正在尝试对其进行签名但失败。我相信我还需要设置 user.signingKey 但我不知道格式是什么,即git config --global user.signingKey <what-is-supposed-to-go-here>

我还有第二个问题。如果一年后我格式化我的电脑并丢失了我的密钥,我将无法验证这些提交是否仍然属于我。除了将密钥转储到某个在线驱动器中(无论如何我都可能会丢失它)之外,是否有一个好的标准将该密钥保存在某个地方?

编辑:我至少设法让 gpg 工作。以下:Git 错误 - gpg 无法签署数据,我的 gpg 崩溃了:

gpg: signing failed: Inappropriate ioctl for device gpg: [stdin]: clear-sign failed: Inappropriate ioctl for device

然后使用 Maven 在 MacOS 上添加export GPG_TTY=$(tty)到 bash,从“gpg:签名失败:设备的 ioctl 不合适”,最终为我工作,所以它至少使用 gpg 对其进行签名。

编辑:以为我设法让它工作,但没有。按照https://docs.github.com/en/authentication/connecting-to-github-with-ssh/generate-a-new-ssh-key-and-adding-it-to-the-ssh-agent,我创建了一个新的 ed25519 ssh 密钥。

之后你需要git config --global gpg.format "ssh",一起git config --global user.signingkey "<key>"

我用作ssh-ed25519 ASD9s8df79AASDa8sd79as7d9a8s7d89ASDASD98a7sd98a7sdASA/sd user@domain.io密钥,来自~/.ssh/id_ed25519.pub.

但后来我去github看到:

在此输入图像描述

现在我已经不知道了。

小智 10

I:设置gpg格式接受ssh:

git config --global gpg.format ssh

二. 将签名密钥设置为您的 ssh 密钥公共文件

git config --global user.signingkey /PATH/TO/.SSH/KEY.PUB

完成这些操作后,请转到 GitHub > 配置文件 > SSH 和 GPG 密钥 > SSH 密钥。然后单击添加新的 SSH 密钥。确保选择类型作为签名密钥并在框中填写公钥。

如果您有任何疑问,请点击以下链接: https://docs.github.com/en/authentication/managing-commit-signature-verification/telling-git-about-your-signing-key# :~:text= Killall%20gpg%2Dagent-,告诉%20Git%20about%20your%20SSH%20key,-你%20can%20使用


Von*_*onC 8

2022 年 7 月:我在这里提出了这个新选项,其中我提到:

ssh 签名的配置user.signingKey支持包含密钥的文件的路径,或者为了方便起见,支持带有 ssh 公钥的文字字符串。

为了区分这两种情况,我们检查前几个字符是否包含“ ssh::”,这不太可能是路径的开头。

但是,GitHub 可能尚未识别基于 SSH 的签名。这在这个线程
中被提到并添加到讨论 7744中。github-community/community

2022 年 6 月上旬,您有:

除了上面提到的 valid-after|before 标志之外,git 确实提供了对撤销 SSH 签名密钥的直接支持:

gpg.ssh.revocationFile
Run Code Online (Sandbox Code Playgroud)

SSH KRL 或已撤销的公钥列表(不带主体前缀)。
有关详细信息,请参阅 ssh-keygen(1)。

如果在此文件中找到公钥,则它将始终被视为具有信任级别“ never”,并且签名将显示为无效。
希望 GitHub 能够提供类似的功能。

David Staheli(GitHub 产品经理)回答:

感谢这些很好的建议。我们可能会发布第一个版本,然后快速跟进其中的一些想法。一旦最终范围确定,我将尝试分享更多细节。尽管 GitHub 已经识别出 GPG 密钥何时过期或撤销,但我想确保我们会支持 SSH 相同的功能,如果 v1 中没有,那么多久之后才会支持。


2022 年 8 月更新:

现在支持 SSH 提交验证

GitHub 现在支持 SSH 提交验证,因此您可以使用自行生成的 SSH 公钥在本地签署提交和标签,这将使其他人对您所做更改的来源充满信心。

如果提交或标签具有可加密验证的 SSH 签名,GitHub 会将提交或标签设为“已验证”或“部分验证”。

已验证提交的映像

如果您已使用 SSH 密钥通过 GitHub 进行身份验证,您现在可以上传相同或不同的密钥并将其用作签名密钥。

您可以添加到帐户的签名密钥数量没有限制。有关更多信息,请访问GitHub 文档中的 SSH 提交验证

ssh 签名密钥 ui 的图像


注意:自 2022 年 12 月起,GitLab (15.7) 还支持使用 SSH 进行提交签名

GitLab 16.9(2024 年 2 月)对于 gitlab.com 非免费(高级版或旗舰版)

使用 SSH 证书验证并签署提交

以前,GitLab.com 上的 Git 访问控制选项依赖于用户帐户中设置的凭据。现在,您可以设置一个流程,以便仅使用 SSH 证书即可进行 Git 访问。您还可以使用这些证书来签署提交。

https://about.gitlab.com/images/16_9/sign-commits-using-ssh-certificates.png -- 使用 SSH 证书对提交进行身份验证和签名

请参阅文档Epic

  • 感谢您提供非常好的答案和信息! (2认同)