我已经gpg-agent使用缓存的密码运行了一个小时左右。我对offlineimapIMAP 同步实用程序的电子邮件帐户密码进行加密,并让脚本通过从 GPG 加密文件中解密密码来传递密码。
由于我offlineimap使用 systemd 运行,因为它是一个 cron 作业,它自然会弹出一个 pinentry 程序并要求输入密码。我想知道是否有一种方法可以以编程方式确认是否gpg-agent需要密码短语,以便我可以查询信息,并在需要交互式密码输入时优雅地退出 systemd/cron 作业。
以前有人这样做过吗?
小智 5
我只是有类似的计划,使用mbsync和定期获取/同步可能的电子邮件cron。密码由pass使用 GnuPG 来加密敏感数据来管理。
较新的 GnuPG(我使用的是 v2.1.18)必须使用gpg-agent来请求必要的密码来解密私钥。gpg-agent当我调用以获取我的电子邮件帐户的密码时,它将自动启动,pass并会弹出询问密码的pinentry对话框。
我不想将gpg-agent我的密码配置为缓存太长时间(例如,1 天甚至 1 年),并且我不想由 cron 作业触发烦人的pinentry对话框gpg-agent,它应该很安静。
我认为cron 作业将在可以解密密码mbsync时同步我的电子邮件,而不会触发询问用户密码,否则,cron 作业将退出。gpgpassgpg-agent
我发现 GnuPG 有这个--pinentry-mode选项,它可能有值:
default:使用代理的默认值,即ask。ask:强制使用 Pinentry。cancel:模拟使用 Pinentry 的取消按钮。error:返回 Pinentry 错误(“No Pinentry”)。loopback:将 Pinentry 查询重定向到调用者。请注意,与 Pinentry 相比,如果用户输入错误的密码,则不会再次提示用户。因此,我可以通过传递--pinentry-mode cancel或显式禁用 pinentry 使用--pinentry-mode error,并gpg尝试签名/解密消息。如果成功,则gpg-agent已经拥有缓存的密码,并且不会弹出pinentry对话框;否则,签名/解密测试就会失败。
例如:
当gpg-agent不缓存所需的密码时:
$ echo "test" | \
gpg2 --sign --batch --no-tty --pinentry-mode error \
--local-user <you@example.com> -o /dev/null
# Return code: 2
# OUTPUT:
# gpg: signing failed: No pinentry
# gpg: signing failed: No pinentry
Run Code Online (Sandbox Code Playgroud)
当gpg-agent已缓存密码时,相同的命令将成功并返回状态代码 0。
如果我使用--pinentry-mode cancel,则gpg失败Operation cancelled。
| 归档时间: |
|
| 查看次数: |
2136 次 |
| 最近记录: |