簡體   English   中英

對於使用 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

當從 Windows 10 提交 WSL2 中的代碼時,我無法在 Visual Studio Code 中使用簽名提交。

問題

Windows 10 內沒有顯示密碼提示導致 git failed with error: gpg failed to sign the data


設置

Windows 設置

帶有 WSL2 和 Windows 終端的最新版本 Windows 10。

Visual Studio Code 安裝在 Windows 10 內,是最新版本 (1.48.0),包含最新的 Remote WSL Extension (v0.44.4)。

我的代碼在運行 Ubuntu 20.04 的 WSL2 中,所有包都已更新。

使用code. 來自 WSL2 的命令。

Git 安裝

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

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

git 存儲庫是使用 WSL2 中的命令行啟動的。

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 session 的 rest,直到我重新啟動筆記本電腦。 此后的任何提交都不再提示輸入密碼。

我現在可以使用 Visual Studio Code git UI 和 VSCode 的內置終端來提交更改。


問題

如果我重新啟動我的筆記本電腦,那么從 Visual Studio Code 提交將不起作用,直到我首先在 WSL2 中緩存 GPG 密碼。

也許值得注意,但如果我沒有緩存密碼並在 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。 但我想找到一個不依賴於可能停止運行的腳本的解決方案。

我找到了一個解決方案......但在撰寫本文時它有一些警告。

由於 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 Explorer 中的 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 內置終端提交

這符合我的要求,但很高興聽到是否有任何我可能沒有考慮過的部分。

只是添加一點,現在看起來很簡單

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

足以(在您的 git 存儲庫中)VS Code 能夠正確地使用本地 gpg 安裝簽署提交

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

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

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

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

此外,您不再需要訂閱 windows 內部人員跟蹤。

您已經指定了pinentry-curses程序,這意味着當您想要被提示輸入密碼時,您需要有一個合適的 TTY 來提示您。

如果您不想要這種行為,您可以使用其他 pinentry 程序; 例如,Debian 提供pinentry-gtk3 package,它可以提供圖形提示。 但是,這要求您的環境中有一個可用的功能 X11 服務器。 這是必要的,因為 Linux 環境通常只支持通過 X11 的圖形(或者可能是 Wayland,這在此處不再適用)。

還有像您提到的其他可能性,可能能夠提供本機 Windows 提示,但所有這些都將依賴額外的附加軟件,因為 Linux 發行版和 ZAEA23489CE3AA9B6406EBB28E0CDA 軟件都沒有提供此功能。 Linux 發行版通常不提供 Windows 圖形界面的軟件,因為它們不提供 Windows,因此大多數用戶將無法使用它。

微軟計划在未來為 WSL 提供更好的圖形支持,但目前還沒有這樣做。

就我而言:

  • 我使用配置了 X 服務器 ( X410 ) 的 wsl2 ( ubuntu20.04 LTS ),並通過安裝 pinentry-gtk2 找到解決方案。
  • 然后將pinentry-program配置為/usr/bin/pinentry-gtk-2 ,一切正常。

腳步:

  1. 配置你的 X 服務器。
  2. 安裝 pinentry-gtk2。 sudo apt install pinentry-gtk-2
  3. 配置 gpg 代理。 添加pinentry-program /usr/bin/pinentry-gtk-2~/.gnupg/gpg-agent.conf
  4. 重新加載 gpg-agent。 執行命令gpg-connect-agent reloadagent /bye

備注:可用的 pinentries

效果: 在此處輸入圖像描述

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM