у меня просто есть аналогичный план для периодической выборки / синхронизации майских писем с помощью mbsync и cron. Пароли находятся под управлением pass который использует GnuPG для шифрования конфиденциальных данных.
новый GnuPG (я использую v2.1.18) должен использовать gpg-agent запрашивать необходимую парольную фразу для расшифровки закрытых ключей.
И gpg-agent будет автоматически запущен, когда, например, я вызываю pass получить пароль для моей учетной записи электронной почты, и всплывет pinentry окно с запросом пароля.
я не хочу настраивать gpg-agent кэширование мою фразу слишком долго (например, 1 день или даже 1 год), и я не хочу, раздражает pinentry диалогового окна gpg-agent вызвано cron заданий, которые должны быть просто тихо.
я думаю mbsync cron работа будет синхронизировать мои письма, когда gpg можно просто расшифровать пароль для pass без срабатывания gpg-agent попросить пользователя пароль, в противном случае задание будет просто выйти.
я нашел GnuPG имеет --pinentry-mode опция, которая может иметь значения:
default: используйте значение по умолчанию агента ask.
ask : Принудьте пользу Pinentry.
cancel : эмуляция использования кнопки отмены Pinentry.
error : возвратить ошибка Pinentry (`нет Pinentry").
loopback : перенаправить запросы Pinentry на абонент. Обратите внимание, что в отличие от Pinentry пользователю не будет предложено снова, если он вводит плохой пароль.
поэтому я могу явно отключить использование pinentry, передав --pinentry-mode cancel или --pinentry-mode error, и пусть gpg попробуйте подписать / расшифровать сообщение. Если это удалось, то gpg-agent уже кэшированный пароль и не всплывал pinentry диалоговое окно; в противном случае тест sign/decrypt просто не удался.
например:
когда 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
, когда gpg-agent уже кэшировал парольную фразу, та же команда будет выполнена успешно и вернет код состояния 0.
если я использую --pinentry-mode cancel, потом gpg выдает Operation cancelled.