WSL2环境下VSCode使用GPG密钥签名Git commit失效如何解决
WSL2 Ubuntu 环境 VSCode Git GPG 提交签名故障修复方案
故障表现
error: gpg failed to sign the data
- Git CLI 单独执行提交签名正常,仅VSCode调用时报错
- CLI 输入过GPG密码、缓存有效期内VSCode可正常提交,缓存失效后故障复现
- VSCode触发提交时弹出的密码输入窗口无法识别输入内容
根因说明
WSL默认使用TTY模式的pinentry密码输入程序,VSCode调用Git的进程上下文未绑定TTY,导致密码输入无法正常传递给gpg-agent。
修复步骤
安装兼容的密码输入组件
执行命令:sudo apt update && sudo apt install -y pinentry-gnome3 pinentry-curses配置gpg-agent参数
编辑~/.gnupg/gpg-agent.conf文件,添加如下配置:
pinentry-program /usr/bin/pinentry-curses allow-loopback-pinentry default-cache-ttl 31536000 max-cache-ttl 31536000
注:如需调整密码缓存时长可自行修改ttl数值,单位为秒,上述配置为缓存1年。
- 配置Shell环境变量
编辑你当前使用的Shell配置文件(bash对应~/.bashrc,zsh对应~/.zshrc),添加如下内容:
export GPG_TTY=$(tty)
- 重载配置生效
依次执行命令:
source ~/.bashrc # 使用zsh的用户替换为 source ~/.zshrc gpg-connect-agent reloadagent /bye
- 验证效果
关闭所有已打开的终端会话,重启VSCode后直接执行提交操作,按提示输入GPG密钥密码即可正常完成签名。
内容的提问来源于stack exchange,提问作者IsraelCena
相关产品推荐
相关产品推荐

