如何防止 gpg-agent 在密码收集期间超时?

如何防止 gpg-agent 在密码收集期间超时?

我正在 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

相关内容