【问题标题】:How do I sign git commits using my existing ssh key如何使用我现有的 ssh 密钥签署 git 提交
【发布时间】:2022-08-24 03:38:06
【问题描述】:

根据 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>?

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

编辑:我至少设法让 gpg 工作。关注:Git error - gpg failed to sign data,我的 gpg 被打破了:

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

然后将export GPG_TTY=$(tty)\"gpg: signing failed: Inappropriate ioctl for device\" on MacOS with Maven 添加到bash,最终为我工作,所以它至少使用gpg 对其进行签名。

编辑:以为我设法让它工作,但没有。在https://docs.github.com/en/authentication/connecting-to-github-with-ssh/generating-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看看:

现在我已经不知道了。

  • ssh 签名充满了棘手的问题;正如您所看到的,即使 gpg 签名也会遇到问题,而且支持的时间更长,因此人们有更多的时间来找出交互出错的地方。不过,我没有关于让 ssh 签名工作的特别建议。
  • 是的,正如你所说,让每一个棘手的部分都工作起来真的很令人沮丧。据我所见,github实际上不支持ssh签名,或者只支持一种非常特定类型的ssh mime,或者它只支持rsa,我不知道。我最终只使用了gpg。
  • 见我的edited answer below:GitHub 现在(2022 年 8 月)支持 SSH 提交验证

标签: git ssh gnupg


【解决方案1】:

2022 年 7 月:我介绍了新的 option here,我在其中提到:

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

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

但是,GitHub 可能尚未识别基于 SSH 的签名。
这在this thread 中提到并添加到github-community/community discussion 7744

2022 年 6 月上旬,您有:

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

gpg.ssh.revocationFile

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

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

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

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


2022 年 8 月更新:

SSH commit verification now supported

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

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

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

您可以添加到您的帐户的签名密钥的数量没有限制。欲了解更多信息,请访问SSH Commit Verification in the GitHub documentation

【讨论】:

  • 感谢您提供非常好的答案和信息!
猜你喜欢
  • 1970-01-01
  • 2018-09-12
  • 2015-10-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多