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

如何从CLI输入gnupg-agent密钥口令并缓存以解决Git签名问题?

解决GPG密钥口令在GUI工具(如VSCode)中无法输入的问题

针对你在fish shell下的场景,我们可以通过预设GPG密钥口令到gpg-agent并确保GUI工具能访问到agent的方式来解决。以下是详细步骤:

1. 确认gpg-agent基础配置

首先,确保你的fish配置文件(~/.config/fish/config.fish)已经正确设置了gpg-agent相关变量,并且启用了预设口令功能:

set -x GPG_TTY (tty)
# 启动gpg-agent,允许预设口令,设置默认缓存时间为12小时(43200秒)
eval (gpg-agent --daemon --allow-preset-passphrase --default-cache-ttl 43200)

同时,建议在~/.gnupg/gpg-agent.conf中添加永久配置(避免每次启动agent都重复加参数):

allow-preset-passphrase
default-cache-ttl 43200
max-cache-ttl 86400  # 可选,设置最大缓存时间为24小时

2. 获取你的GPG密钥Keygrip

gpg-preset-passphrase工具需要使用密钥的Keygrip来定位目标密钥,运行以下命令获取:

gpg --list-secret-keys --with-keygrip

在输出中找到你用于提交签名的主密钥(sec开头的行),复制对应的Keygrip值,示例输出如下:

sec rsa4096 2023-01-01 [SC]
ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890ABCDEF
Keygrip = 1234567890ABCDEF1234567890ABCDEF12345678

3. 预设口令到gpg-agent

首先确认gpg-preset-passphrase工具的安装路径,运行:

which gpg-preset-passphrase

通常路径为/usr/libexec/gpg-preset-passphrase或/usr/lib/gpg-preset-passphrase。

然后使用该工具预设口令(替换成你自己的Keygrip):

# 安全方式:工具会提示你输入口令,避免明文暴露
/usr/libexec/gpg-preset-passphrase --preset 1234567890ABCDEF1234567890ABCDEF12345678

输入你的GPG密钥口令后,gpg-agent就会缓存这个口令,有效期为你设置的12小时。

4. 确保GUI工具能访问gpg-agent

如果你从终端启动VSCode,环境变量会自动继承,无需额外设置。但如果是从桌面启动VSCode,需要确保GPG_AGENT_INFO环境变量被全局继承:

  • 对于X11桌面,在~/.xprofile中添加:
    eval $(gpg-agent --daemon --allow-preset-passphrase --default-cache-ttl 43200)
    
  • 对于Wayland桌面,在~/.config/wayland-session或对应桌面的启动配置文件中添加上述命令。

完成以上步骤后,你在VSCode等GUI工具中提交代码时,就可以直接使用已缓存的GPG密钥签名,无需再次输入口令了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 07:45:55