从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。但我想找到一个解决方案,不依赖于一个脚本,可能会停止运作。
6条答案
按热度按时间tp5buhyn1#
非常感谢@39digits的有用回答!
截至2021年8月的一些更新:
使用最新版本的gpg 4 win,您需要在WSL 2 ubuntu中的
~/.gnupg/gpg-agent.conf
文件中设置以下配置:之后,您可能需要通过运行以下命令重新启动GPG代理:
此外,您不再需要订阅windows内部人员跟踪。
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现在,当你被要求输入密码时,GPG GUI就会出现。
我已经测试了这个重新启动机器,以确保密码不被缓存,它适用于:
这符合我的要求,但很高兴听到如果有任何位我可能没有考虑。
aoyhnmkz3#
在我的情况下:
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
ugmeyewa4#
再补充一点,现在看起来
足够(在你的git仓库中)让VS Code能够用你的本地gpg安装正确地签署提交
pobjuy325#
您已经指定了
pinentry-curses
程序,这意味着当您希望提示输入密码时,您需要有适当的TTY来提示您。如果你不想这样,还有其他的细条目程序可以使用;例如,Debian提供了
pinentry-gtk3
包,它可以提供图形提示。但是,这需要在您的环境中有一个可用的X11服务器。这是必要的,因为Linux环境通常只支持通过X11(或者可能是Wayland,它在这里不太可能工作)的图形。还有其他的可能性,就像你提到的,可能能够提供一个本地的Windows提示,但所有这些都将依赖于额外的附加软件,因为Linux发行版和Windows都没有提供这个功能的软件。Linux发行版通常不提供Windows图形界面的软件,因为它们不提供Windows,所以大多数用户将无法使用它。
微软计划在未来为WSL提供更好的图形支持,但到目前为止还没有这样做。
46qrfjad6#
对于WLS2用户:
如果您的GIT for >= v2.39.0
GIT >= v2.36.1
GIT < v2.36.1
完整教程:
https://learn.microsoft.com/pt-br/windows/wsl/tutorials/wsl-git