我正在 CLI 脚本中调用gpg2
以对本地文件进行对称加密。它似乎gpg-agent
通过某些 CLI(基于文本的 UI)提示输入密码。只要我在附近输入密码,一切都会正常进行。但是,如果我不在,它最终会失败并显示以下消息:
gpg-agent[15338]: command get_passphrase failed: Operation cancelled
gpg: cancelled by user
gpg: error creating passphrase: Operation cancelled
gpg: symmetric encryption of `XXXX.tar' failed: Operation cancelled
有什么办法可以完全关闭这个超时吗?
我希望密码提示一直保留在屏幕上,直到我输入某些内容。
答案1
解决方案已在这里找到:https://dev.gnupg.org/T3240
延迟是由 pinentry 查询 GNOME 密钥环引起的。添加no-allow-external-cache
到您的gpg-代理配置文件,或者删除gnome-keyring
,并终止当前正在运行的 gpg-agent:gpgconf --kill gpg-agent
答案2
在 gpg-agent.conf 中(参见gpg-代理(1)),请尝试以下选项:
pinentry-timeout 0
pinentry-program /usr/bin/pinentry-curses --timeout 0
(不过你可能会发现pinentry-tty
使用起来更方便。)
答案3
问:“如何防止 gpg-agent 在密码收集过程中超时?”
gpg
答:特定情况是会话中的使用ssh
。以下配置启用gpg-代理也可以在ssh
会话中。特别是
- 禁止抢夺允许剪切和粘贴
- 不允许外部缓存禁用任何密钥环
- pinentry-curses在终端中要求输入密码,而不是默认密码松树入口在远程(ssh 的情况下)桌面窗口中询问。
- 生存的时间生存时间(5,6)设置为 24 小时。这样,当(例如)每天运行使用 gpg-agent 调用脚本的 cron 时,就无需重新输入密码。
shell> cat ~/.gnupg/gpg-agent.conf
no-grab
no-allow-external-cache
pinentry-program /usr/bin/pinentry-curses
default-cache-ttl 86400
max-cache-ttl 86400
答案4
对我(gpg 2.1.11)有用的是将选项设置pinentry-timeout
为一个大值(比如 24 小时),方法是将以下内容添加到我的~/.gnupg/gpg-agent.conf
文件中:
# time until pinentry closes in seconds
pinentry-timeout 86400