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

如何在Bash脚本中无交互使用gpg --pinentry-mode loopback?

无交互使用--pinentry-mode loopback解密PGP文件

可以无交互使用--pinentry-mode loopback,但需要先配置GPG允许该模式,并配合密码传递方式实现无交互解密。

第一步:开启loopback模式支持

编辑用户级GPG配置文件~/.gnupg/gpg.conf(系统级可编辑/etc/gnupg/gpg.conf),添加或确认以下配置行:

allow-loopback-pinentry

保存后重启gpg-agent生效:

gpgconf --kill gpg-agent

无交互解密的实现方式

方式1:通过标准输入传递密码

在Bash脚本中,结合--passphrase-fd 0将密码通过标准输入传入,同时指定GPG_TTY避免环境错误:

export GPG_TTY=$(tty)
gpg --pinentry-mode loopback --passphrase-fd 0 --decrypt your_file.gpg > decrypted_output.txt <<EOF
你的密钥密码
EOF

方式2:通过密码文件传递

创建权限严格的密码文件(权限设为600,防止其他用户读取):

echo "你的密钥密码" > pass.txt
chmod 600 pass.txt

然后在脚本中调用:

export GPG_TTY=$(tty)
gpg --pinentry-mode loopback --passphrase-file pass.txt --decrypt your_file.gpg > decrypted_output.txt

方式3:利用gpg-agent缓存密码

如果不想明文存储密码,可先将密码缓存到gpg-agent(仅需手动输入一次,后续一段时间内解密无需重复输入):

# 缓存密码
echo "你的密钥密码" | gpg --pinentry-mode loopback --passphrase-fd 0 --quick-sign -
# 后续无交互解密
export GPG_TTY=$(tty)
gpg --pinentry-mode loopback --decrypt your_file.gpg > decrypted_output.txt

额外排查点

你遇到的gpg: public key decryption failed: Permission denied和gpg: decryption failed: No secret key错误,除了pinentry模式问题,还可以检查:

  • ~/.gnupg/目录权限是否为700,密钥文件权限是否为600
  • 当前用户是否有权限访问GPG密钥环
  • 密钥是否正确导入到当前用户的密钥库中

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 10:36:05