野声

Hey, 野声!

谁有天大力气可以拎着自己飞呀
twitter
github

在 VSCode WSL 中使用 GPG 對 Git 記錄進行簽名

最近配置了一下 git 的 GPG,但是在使用 VSCode WSL 进行 git commit 的时候就提示:

Git: gpg 無法對數據進行簽名

詳細輸出如下:

> git -c user.useConfigOnly=true commit --quiet --allow-empty-message --file -
error: gpg 無法對數據進行簽名
fatal: 無法寫入提交對象

原因#

原因是你沒有「輸入」你設置的 gpg key 的密碼,因為使用 VSCode WSL 的時候,沒有一個圖形界面讓你輸密碼,所以 gpg 無法 sign 你的 commit。

在 Windows 圖形界面下,gpg 會彈出一個 Pinentry 的 dialog 框讓你輸密碼。而我們在使用 VSCode WSL 時,WSL 並沒有使用到圖形界面(XServer)。

解決方法#

解決方法很簡單:

gpg 會緩存我們第一次輸入的密碼,一段時間內我們多次對數據簽名不需要重複輸入密碼,所以我們可以寫一個 shell 函數,每次手動輸入好了 gpg 的密碼後,再使用 vsc 提交 commit。

如下兩個函數:

gpg-login() {
    export GPG_TTY=$TTY
    # 對 "test" 這個字符串進行 gpg 簽名,這時候需要輸密碼。
    # 然後密碼就會被緩存,下次就不用輸密碼了。
    # 重定向輸出到 null,就不會顯示到終端中。
    echo "test" | gpg --clearsign > /dev/null 2>&1
}

gpg-logout() {
    echo RELOADAGENT | gpg-connect-agent
}

在終端中輸入 gpg-login,就會出現輸密碼的框,輸完密碼之後該密碼會被緩存,之後在 VSCode 進行 commit 的時候不用輸密碼了。

輸入 gpg-logout 就可以清除你 gpg 密碼的緩存。

雖然不是解決辦法,但使用起來也還算方便,也能忍。

關於我 Shell 的一些其他配置,可見:ubuntu_wsl/zshrc

配置 gpg 緩存時間#

編輯這個文件 ~/.gnupg/gpg-agent.conf

添加如下內容,就可以將密碼緩存 1 小時。

default-cache-ttl 3600
max-cache-ttl 3600

單位是秒。

參考鏈接#

載入中......
此文章數據所有權由區塊鏈加密技術和智能合約保障僅歸創作者所有。