在Windows 10上的Visual Studio Code中,使用WSL2进行签名的git提交时没有GPG密码提示符

tcomlyy6  于 2023-09-29  发布在  Git
关注(0)|答案(6)|浏览(135)

从Windows 10在WSL 2中提交代码时,我无法在Visual Studio Code中使用签名提交。

问题

在Windows 10中没有显示密码提示,导致git失败,error: gpg failed to sign the data

设置
Windows安装

最新版本的Windows 10与WSL 2和Windows终端。
Visual Studio Code安装在Windows 10中,是最新版本(1.48.0),包括最新的远程WSL扩展(v0.44.4)。
我的代码在运行Ubuntu 20.04的WSL 2中,所有软件包都已更新。
Visual Studio Code是通过命令行使用WSL 2中的code .命令打开的。

Git设置

Git(2.25.1)安装在WSL 2中,全局配置如下:

[user]
    name = My Name
    email = [email protected]
    signingkey = A1B2C3D4E5F67890
[commit]
    gpgsign = true

git仓库是使用WSL 2中的命令行启动的。

GPG设置

gnupg(2.2.19)安装在WSL 2中。
我有~/.gnupg/gpg.conf设置

use-agent
default-key A1B2C3D4E5F67890

~/.gnupg/gpg-agent.conf

default-cache-ttl 34560000
max-cache-ttl 34560000
pinentry-program /usr/bin/pinentry-curses

我的~/.zprofile

export GPG_TTY=$(tty)
export GPG_AGENT_INFO=${HOME}/.gnupg/S.gpg-agent:0:1

什么工作

如果我在Windows终端的WSL 2中运行git commit,它会提示我输入密码。

┌────────────────────────────────────────────────────────────────┐
│ Please enter the passphrase to unlock the OpenPGP secret key:  │
│ "My Name <[email protected]>"                               │
│ 4096-bit RSA key, ID A1B2C3D4E5F67890,                         │
│ created 2020-08-10.                                            │
│                                                                │
│                                                                │
│ Passphrase: __________________________________________________ │
│                                                                │
│         <OK>                                    <Cancel>       │
└────────────────────────────────────────────────────────────────┘

然后,在我的Windows会话的其余部分中缓存此密码,直到我重新启动笔记本电脑。在此之后的任何提交都不再提示输入密码。
我现在可以使用Visual Studio Code git UI和VSCode的内置终端来提交更改。

问题

如果我重新启动我的笔记本电脑,那么在我首先在WSL 2中缓存GPG密码之前,来自Visual Studio Code的提交不会工作。
也许值得注意的是,但是如果我没有缓存密码,并在Visual Studio Code中打开代码,并尝试从内置的VSCode终端提交,它也会失败。只有在WSL 2中通过Windows终端首次输入密码时,它才有效。
我知道Windows 10和WSL 2实际上是两个不同的系统,但是有没有办法让Windows在WSL 2中运行git时显示GPG密码提示?
或者我需要完全不同的设置吗?我已经使用MacOS进行开发很长一段时间了,所以不确定Windows 10上的最佳路线是什么。

  • 编辑时间:2020-08-17* 我找到了https://github.com/diablodale/pinentry-wsl-ps1并使用脚本作为pinentry。当密码没有被缓存时,这会在Windows 10中工作并显示GUI。但我想找到一个解决方案,不依赖于一个脚本,可能会停止运作。
tp5buhyn

tp5buhyn1#

非常感谢@39digits的有用回答!
截至2021年8月的一些更新:
使用最新版本的gpg 4 win,您需要在WSL 2 ubuntu中的~/.gnupg/gpg-agent.conf文件中设置以下配置:

pinentry-program "/mnt/c/Program Files (x86)/Gpg4win/bin/pinentry.exe"

之后,您可能需要通过运行以下命令重新启动GPG代理:

gpg-connect-agent reloadagent /bye

此外,您不再需要订阅windows内部人员跟踪。

vhmi4jdf

vhmi4jdf2#

我找到了一个解决方案...但在写这篇文章的时候它有警告。
由于Visual Studio Code在Windows 10中运行,而git和gpg在WSL 2中,因此我想到在Windows 10端尝试一个可视化的pinentry。
直到我订阅了Windows Insider的曲目并更新到最新的Dev Build(2004 Build 20190.1000),这才起作用。

需要执行的步骤:

加入Windows Insider计划并将Windows 10更新到2004 Build 20190.1000(可能适用于早期版本,但这是我最先收到的版本)。这将为WSL 2带来一些有趣的额外功能,增加了互操作性-您现在还将注意到Windows资源管理器中的Linux选项。
https://www.gpg4win.org安装GPG 4 Win。除了默认的gnupg之外,不需要其他任何东西,但我也安装了Kleopatra,以防它在其他地方派上用场。
编辑~/.gnupg/gpg-agent.conf并更改Pinentry

pinentry-program "/mnt/c/Program Files (x86)/GnuPG/bin/pinentry-basic.exe"

现在,当你被要求输入密码时,GPG GUI就会出现。
我已经测试了这个重新启动机器,以确保密码不被缓存,它适用于:

  • 从WSL 2命令行提交
  • 使用Visual Studio Code git UI提交
  • 使用Visual Studio Code内置终端提交

这符合我的要求,但很高兴听到如果有任何位我可能没有考虑。

aoyhnmkz

aoyhnmkz3#

在我的情况下:

  • 我使用wsl 2(ubuntu20.04 LTS)配置X服务器(X410),并通过安装pinentry-gtk 2找到解决方案。
  • 然后将pinentry-program配置为/usr/bin/pinentry-gtk-2,一切正常。

步骤:
1.配置您的X服务器。
1.安装pinentry-gtk 2。sudo apt install pinentry-gtk-2
1.配置gpg-agent。将pinentry-program /usr/bin/pinentry-gtk-2添加到~/.gnupg/gpg-agent.conf
1.重新加载gpg-agent。执行命令gpg-connect-agent reloadagent /bye
备注:Avaliable pinentries
效果:x1c 0d1x

ugmeyewa

ugmeyewa4#

再补充一点,现在看起来

git config --local gpg.program /usr/bin/gpg

足够(在你的git仓库中)让VS Code能够用你的本地gpg安装正确地签署提交

pobjuy32

pobjuy325#

您已经指定了pinentry-curses程序,这意味着当您希望提示输入密码时,您需要有适当的TTY来提示您。
如果你不想这样,还有其他的细条目程序可以使用;例如,Debian提供了pinentry-gtk3包,它可以提供图形提示。但是,这需要在您的环境中有一个可用的X11服务器。这是必要的,因为Linux环境通常只支持通过X11(或者可能是Wayland,它在这里不太可能工作)的图形。
还有其他的可能性,就像你提到的,可能能够提供一个本地的Windows提示,但所有这些都将依赖于额外的附加软件,因为Linux发行版和Windows都没有提供这个功能的软件。Linux发行版通常不提供Windows图形界面的软件,因为它们不提供Windows,所以大多数用户将无法使用它。
微软计划在未来为WSL提供更好的图形支持,但到目前为止还没有这样做。

46qrfjad

46qrfjad6#

对于WLS2用户:
如果您的GIT for >= v2.39.0

git config --global credential.helper "/mnt/c/Program\ Files/Git/mingw64/bin/git-credential-manager.exe"

GIT >= v2.36.1

git config --global credential.helper "/mnt/c/Program\ Files/Git/mingw64/libexec/git-core/git-credential-manager.exe"

GIT < v2.36.1

git config --global credential.helper "/mnt/c/Program\ Files/Git/mingw64/bin/git-credential-manager-core.exe"

完整教程:
https://learn.microsoft.com/pt-br/windows/wsl/tutorials/wsl-git

相关问题