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

     2023-02-19     109

关键词:

【中文标题】对于使用 WSL2 进行签名的 git 提交,Windows 10 上的 Visual Studio Code 中没有 GPG 密码提示【英文标题】:No GPG passphrase prompt in Visual Studio Code on Windows 10 for signed git commits using WSL2 【发布时间】:2020-12-05 23:39:45 【问题描述】:

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

问题

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


设置

Windows 安装程序

带有 WSL2 和 Windows 终端的最新版 Windows 10。

Visual Studio Code 安装在 Windows 10 中,是最新版本 (1.48.0),包括最新的远程 WSL 扩展 (v0.44.4)。

我的代码在运行 Ubuntu 20.04 的 WSL2 中,所有软件包都已更新。

Visual Studio Code 是通过命令行使用 WSL2 中的 code . 命令打开的。

Git 设置

Git (2.25.1) 安装在 WSL2 中,具有以下全局配置:

[user]
    name = My Name
    email = my.email@example.com
    signingkey = A1B2C3D4E5F67890
[commit]
    gpgsign = true

使用 WSL2 中的命令行启动 git 存储库。

GPG 设置

gnupg (2.2.19) 安装在 WSL2 中。

我有~/.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 终端的 WSL2 中运行 git commit,它会提示我输入密码。

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

然后,此密码会在我的 Windows 会话的其余部分缓存,直到我重新启动笔记本电脑。在此之后的任何提交都不再提示输入密码。

我现在可以使用 Visual Studio Code git UI 和 VSCode 的内置终端来提交更改。


问题

如果我重新启动我的笔记本电脑,那么在我首先在 WSL2 中缓存 GPG 密码之前,来自 Visual Studio Code 的提交将不起作用。

也许值得注意,但如果我没有缓存密码并在 Visual Studio Code 中打开代码并尝试从内置的 VSCode 终端进行提交,它也会失败。仅当密码首先通过 Windows 终端在 WSL2 中输入时才有效。

我很欣赏 Windows 10 和 WSL2 确实是两个不同的系统,但有什么方法可以让 Windows 显示在 WSL2 中运行的 git 的 GPG 密码提示?

或者我需要完全不同的设置吗?我已经使用 MacOS 进行了很长时间的开发,所以不确定在 Windows 10 上最好的路线是什么。

编辑:2020-08-17 我找到了https://github.com/diablodale/pinentry-wsl-ps1 并将脚本用作 pinentry。当密码未缓存时,这有效并在 Windows 10 中显示 GUI。但我想找到一个不依赖可能停止运行的脚本的解决方案。

【问题讨论】:

【参考方案1】:

非常感谢@39digits 的有用回答!

截至 2021 年 8 月的一些更新:

使用最新版本的 gpg4win,您需要在 WSL2 ubuntu 中的 ~/.gnupg/gpg-agent.conf 文件中设置以下配置:

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

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

gpg-connect-agent reloadagent /bye

此外,您不再需要订阅 Windows Insiders 跟踪。

【讨论】:

现在,如果安装了适用于 Windows 的 Git,pinentry-program "/mnt/c/Program Files/Git/usr/bin/pinentry.exe" 也可以使用。【参考方案2】:

就我而言:

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

步骤:

    配置您的 X 服务器。 安装 pinentry-gtk2。 sudo apt install pinentry-gtk-2 配置 gpg 代理。将pinentry-program /usr/bin/pinentry-gtk-2 添加到~/.gnupg/gpg-agent.conf 重新加载 gpg 代理。执行命令gpg-connect-agent reloadagent /bye

注意事项: Avaliable pinentries

效果:

【讨论】:

【参考方案3】:

我找到了解决方案...但在撰写本文时有一些警告。

由于 Visual Studio Code 在 Windows 10 中运行并且 git 和 gpg 在 WSL2 中,我想在 Windows 10 端尝试可视化 pinentry。

直到我订阅了 Windows Insider 的跟踪并更新到最新的 Dev Build (2004 Build 20190.1000),这才奏效。

所需步骤:

加入 Windows Insider 计划并将 Windows 10 更新到 2004 Build 20190.1000(可能适用于早期版本,但这是我第一次收到的版本)。这将为 WSL2 带来一些有趣的附加功能,提高互操作性 - 您现在还会注意到 Windows 资源管理器中的 Linux 选项。

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

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

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

现在,当您被要求输入密码时,GPG GUI 就会显示出来。

我已经测试了重启机器以确保密码不会被缓存并且它适用于:

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

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

【讨论】:

我还没有~/.gnupg/gpg-agent.conf 文件,但是在我创建它之后它仍然有效。【参考方案4】:

您已指定pinentry-curses 程序,这意味着当您想要提示输入密码时,您需要有适当的 TTY 来提示您。

如果您不希望这种行为,您可以使用其他 pinentry 程序;例如,Debian 发布了pinentry-gtk3 软件包,它可以提供图形提示。但是,这要求您的环境中有一个可用的功能 X11 服务器。这是必要的,因为 Linux 环境通常只支持通过 X11(或者可能是 Wayland,这在此处不再适用)的图形。

像您提到的那样,还有其他可能提供原生 Windows 提示,但所有这些都将依赖额外的附加软件,因为 Linux 发行版和 Windows 都没有提供提供此功能的软件. Linux 发行版通常不提供适用于 Windows 图形界面的软件,因为它们不提供 Windows,因此大多数用户将无法使用它。

Microsoft 计划在未来为 WSL 提供更好的图形支持,但目前还没有这样做。

【讨论】:

我刚刚尝试使用安装在 Windows 端的 GPG 可视化 pinentry,它可以工作。它不适用于当前的马厩。我需要更新到 Insider's Build 20190.1000 以获取即将到来的 WSL2 增强功能。

使用 Git 签署提交不需要我的密码

】使用Git签署提交不需要我的密码【英文标题】:SigningcommitswithGitdoesn\'taskformypassphrase【发布时间】:2018-09-1219:27:53【问题描述】:我尝试使用命令gitcommit-S对我的提交进行签名,但它没有提示我输入GPG密钥的密码就失败了。错... 查看详情

git使用(上)

一、Git配置使用Git的第一件事就是设置你的名字和email,这些就是你在提交commit时的签名,每次提交记录里都会包含这些信息。使用gitconfig命令进行配置:gitconfig--globaluser.namegitconfig--globaluser.email 二、获取一个Git仓库 为了... 查看详情

错误:ITMS-90034:缺少或无效的签名未使用 Apple 提交证书进行签名

】错误:ITMS-90034:缺少或无效的签名未使用Apple提交证书进行签名【英文标题】:Error:ITMS-90034:MissingorinvalidsignatureisnotsignedusinganApplesubmissioncertificate【发布时间】:2019-11-3003:58:35【问题描述】:我在上传应用程序时使用Ionic,它... 查看详情

svn向git进行转换如何拉取指定版本后的提交(代码片段)

...runkdocutils-r8000:HEAD可以拉取8000版本以后的提交记录。 对于一些项目老的提交版本过多的话,使用这个命令可以将以前老的提交全部都忽略掉。 查看详情

使用git提交代码流程

一.拉取最新代码  一般在本地进行开发时,都是切换到自己的dev分支进行开发,当开发完成需要进行代码提交,在进行代码提交前需要先进行拉取远程仓库代码,进行更新,但是此时会提示需要将本地代码进行commit或者stash,一种解决... 查看详情

带有 VSCode + WSL2 + Docker 的 Windows 上的 Git + SSH 密钥问题

...了很多,但似乎无法找到正确的组合来让它发挥作用。我使用的是Windows10,并且正在将VSCode与Docker和WSL2一起使用。在我的一生中, 查看详情

为啥带有 SourceTree 的 WSL2 上的 Git 对我来说这么慢?

...。Windows10(2004版,build19041.572)64位操作系统在WSL2上,我使用的是Ubuntu(Ubuntu-20.04 查看详情

git:使用标签

git:使用标签​​创建签名标签​​​​切换标签​​​​推送标签​​​​删除标签​​​​按模式搜索标签​​​​使用标签发布软件​​​​基于标签创建发布日志​​Git可以选择向提交添加其他元数据。这可用于记录例... 查看详情

git入门(代码片段)

...提交commit时的签名,每次提交记录中都会包含这些信息。使用gitconfig命令进行配置:gitconfig--globaluser.name‘haohj‘gitconfig--globaluser.email‘[email protected]‘执行了上面的命令后,就会在C:UsersAdministrator下建立一个叫.git 查看详情

git积累

1、使用gitconfig命令进行配置(此配置为全局配置,这些是在提交commit时的签名):$gitconfig--globaluser.name"ScottChacon"$gitconfig--globaluser.email"[email protected]" 2、克隆仓库使用下面方式进行clone:$gitclonehttps://github.com/shiyanlou/gitproj... 查看详情

git配置忽略文件(已提交文件和目录的忽略)

...;叹号!表示不忽略(跟踪)匹配到的文件或目录;此外,git对于.gitignore配置文件是按行从上到下进行规则匹配的,意味着如果前面的规则匹配的范围更大,则后面的规则将不会生效;我们在使用git对项目进行版本管理的时候,总... 查看详情

git

1.Git初始化使用Git命令gitinit,会创建一个.git的文件,.git文件下面存放了一些配置文件,不能删除。2.设置签名:  用户名:tt  Email地址:[email protected]  作用:区分不同开发人员身份。  辨析:这里设置的签名和远... 查看详情

如何添加和提交使用“rm”而不是“git rm”进行的删除?

】如何添加和提交使用“rm”而不是“gitrm”进行的删除?【英文标题】:Howtoaddandcommitremovalsmadewith"rm"insteadof"gitrm"?【发布时间】:2010-12-2319:42:23【问题描述】:我使用rm、Finder等从Git存储库中删除了一堆文件和目... 查看详情

如何添加和提交使用“rm”而不是“git rm”进行的删除?

】如何添加和提交使用“rm”而不是“gitrm”进行的删除?【英文标题】:Howtoaddandcommitremovalsmadewith"rm"insteadof"gitrm"?【发布时间】:2010-12-2319:42:23【问题描述】:我使用rm、Finder等从Git存储库中删除了一堆文件和目... 查看详情

git使用记录(代码片段)

...先去官网上下载Git-2.18.0-64-bit.exe2,然后默认安装即可,使用gitbash3,安装完成后,打开终端如图所示: 4,先进行初始化配置使用Git的第一件事就是设置你的名字和email,这些就是你在提交commit时的签名。$gitconfig--globaluser.name"z... 查看详情

使用git进行版本控制(代码片段)

...提交者提交日期提交的捎带信息当内容较多时,可以使用空格进行翻页,b向上翻页,q退出。gitlog--pretty=oneline简化输出&#x 查看详情

修改 Fossil 中的提交

...【问题描述】:在Git中,更改当前分支上的最新提交一个使用--amend选项到git-commit。Fossil中最接近的操作是什么?有没有一种将GPG签名添加到未签名提交(gitcommit--amend-S)的方法?【问题讨论】:【参考方案1】:在化石中,没有办... 查看详情

使用git进行版本控制(代码片段)

...提交者提交日期提交的捎带信息当内容较多时,可以使用空格进行翻页,b向上翻页,q退出。gitlog--pretty=oneline简化输出,仅 查看详情