GPG已缓存密码短语仍要求输入,无人值守解密失败求助
解决GPG无人值守解密pass密码库的问题
核心问题分析
全局启用batch选项会强制GPG拒绝所有输入请求(包括从gpg-agent获取缓存密码的loopback通道);而非batch模式下,GPG会默认调用pinentry程序,即使agent已缓存密码也可能触发交互式输入请求。
具体修复步骤
1. 调整gpg.conf配置
编辑~/.gnupg/gpg.conf,移除全局batch选项,保留以下配置:
use-agent pinentry-mode loopback
2. 确保gpg-agent配置生效
确认~/.gnupg/gpg-agent.conf已有以下配置(你的现有配置已满足):
default-cache-ttl 600 max-cache-ttl 86400 allow-loopback-pinentry allow-preset-passphrase pinentry-program /opt/homebrew/bin/pinentry-mac
重启gpg-agent使配置生效:
gpg-connect-agent reloadagent /bye
3. 执行带参数的解密命令
在无人值守场景下,给gpg命令显式指定--batch和--pinentry-mode loopback参数,而非依赖全局配置:
gpg --batch --pinentry-mode loopback -d ~/.password-store/hostname/file.gpg
4. 适配pass工具的无人值守调用
如果要直接用pass命令实现无人值守,设置环境变量让pass自动传递GPG参数:
export PASSWORD_STORE_GPG_OPTS="--batch --pinentry-mode loopback" # 之后直接调用pass命令即可 pass hostname/file
额外验证步骤
确认密钥指纹与缓存的密码短语匹配:
gpg-connect-agent "KEYINFO D16778601E81E1B4B4E4F9960C59D191A256F7B9" /bye
若输出包含1,说明agent已正确加载该密钥。
内容的提问来源于stack exchange,提问作者maxipaddy
相关产品推荐
相关产品推荐

