You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

已配置GPG_TTY仍提示未设置 WSL2下Git凭证GPG/Pass配置问题

问题原因分析

  • 你当前的报错核心是fish shell的环境变量继承逻辑和动态TTY赋值的问题:
    • 你大概率是临时在当前终端手动设置了GPG_TTY,这种方式如果没有加导出参数,git调用的gpg/pass等子进程无法读取到该变量
    • 硬编码TTY路径也是错误的:每新开一个终端窗口/标签的TTY路径都会变化,固定写死/dev/pts/0只会在当前终端生效,新开终端就会失效
  • 关于gpg-agent:不需要手动启动,gpg调用时会自动拉起后台进程,你手动执行gpg-agent --daemon反而可能出现多实例冲突,导致变量不继承的问题

完整配置步骤(适配WSL2 + fish + Ubuntu 20.04)

1. 修复GPG_TTY配置

编辑fish的通用配置文件~/.config/fish/config.fish,添加以下内容:

# 动态设置GPG_TTY并导出给所有子进程
set -x GPG_TTY (tty)

保存后执行source ~/.config/fish/config.fish生效,新开终端也会自动加载。

2. 配置pinentry程序

WSL2无头环境需要用命令行版本的pinentry,先安装:

sudo apt install pinentry-tty

然后编辑~/.gnupg/gpg-agent.conf,添加以下内容:

pinentry-program /usr/bin/pinentry-tty

重启gpg-agent生效:

gpgconf --kill gpg-agent

下次调用gpg时会自动启动新的agent进程,不需要手动拉起。

3. 验证Git Credential Manager配置

执行以下命令确认GCM的凭证存储配置正确:

git config --global credential.credentialStore gpg

如果之前配置过错误的存储方案,可以先执行git config --global --unset credential.helper清空旧配置,再重新走GCM的初始化流程。

4. 功能验证

第一次执行git push时会弹出pinentry提示要求输入GPG密钥的密码,输入后密码会被gpg-agent缓存,后续所有git操作都不需要再输入密码或者GitHub token。

各工具职责边界梳理

  • git-credential-manager-core:负责和Git对接,处理不同Git托管平台的凭证生成、存储、读取逻辑,是衔接Git和存储后端的中间层
  • pass:GCM的凭证存储后端,用GPG加密保存所有凭证内容,本质是加密的本地文件存储体系
  • gpg:负责加密/解密pass存储的凭证内容
  • gpg-agent:负责缓存GPG密钥的密码,避免每次解密都要输入密码,同时调用pinentry程序处理密码输入交互
  • pinentry-tty:TTY环境下的密码输入交互程序,负责接收你输入的GPG密钥密码

内容的提问来源于stack exchange,提问作者zaabson

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 05:54:03