у меня просто есть аналогичный план для периодической выборки / синхронизации майских писем с помощью 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
.