使用 gpg 密钥进行 git 提交在 VSCode 中不起作用

问题描述 投票:0回答:3

添加了 gpg 密钥来签署提交。

所有配置完成后,我就可以通过git cli进行签名了。

但是当我使用 vscode 提交时,它会打开一个终端窗口,以便我可以输入我的密钥密码。 窗口出现一点问题,不接受密码并在 vscode 中返回错误:

error: gpg failed to sign the data

当我重新启动 gpg-agent 并设法通过 cli 提交时。

当我通过 cli 输入密码时,它会存储在终端的该部分中,并且我设法通过 vscode 提交。当您关闭该部分时,错误将返回。

我在 Linux Ubuntu 20 上使用 wsl2

git visual-studio-code gnupg gpg-agent
3个回答
0
投票

我猜你的问题是:

  • 您从未启动 gpg-agent 的环境启动 VSCode,因此 VSCode 无权访问指示如何访问 gpg-agent 的环境变量
  • 当您从 VSCode 中打开的终端启动 gpg-agent 时,它会更新该终端的环境(每个终端都是一个单独的进程),但不会更新 IDE 或其他终端的环境

要确认正确的环境是否有效,您可以尝试以下操作:

  • 关闭所有正在运行的 VSCode 实例
  • 打开一个新的终端(无论您使用什么 shell:bash、powershell、cmd.exe ...)
  • 从该终端启动你的 gpg-agent
  • 从同一个终端,从命令行启动 VSCode
  • 检查从该 VSCode 实例提交是否仍然存在问题

您可以在启动 gpg-agent 之前和之后检查环境,以确认变量确实已更新(在 bash 中,这仅意味着从命令行运行

env
env | sort
)。


0
投票

我找到了解决方案...

所需步骤:

https://www.gpg4win.org 安装 GPG4Win。除了默认的 gnupg 之外,不需要其他任何东西,但我也安装了 Kleopatra,以防它在其他地方派上用场。

编辑 ~/.gnupg/gpg-agent.conf 并更改 pinentry

pinentry-程序“/mnt/c/Program Files (x86)/GnuPG/bin/pinentry-basic.exe”


0
投票

此外,当使用 gitconfig 文件启用 GPG 签名时,请确保使用创建 gpg 密钥时的长密钥,即:

[user]
email = [email protected]
name = My Name
signingkey = ########################################
[gpg]
    program = gpg
[commit]
    gpgsign = true

如果您遇到诸如因私钥不存在而无法签名之类的错误,这应该可以工作。

如果你想找到这些凭证,请转到 git bash 并点击

gpg --list-secret-keys --keyid-format=long 
命令,该命令应该输出如下内容:

sec   rsa4096/SHORT_KEY_ID yyyy-mm-dd [SC] [expires: yyyy-mm-dd]
  LONG_KEY_ID
uid                 [ultimate] My Name (comment) <[email protected]>
ssb   rsa4096/SHORT_KEY_ID yyyy-mm-dd [E] [expires: yyyy-mm-dd]

您将需要使用 LONG_KEY_ID 作为签名密钥!

希望有帮助。

签名,9662e103-129a

© www.soinside.com 2019 - 2024. All rights reserved.