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