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