Заставить gpg-agent забыть пароль
Я использую gpg-agent 2.0.17 с gpg 1.4.11 в Ubuntu 12.04 и аддон Enigmail для Thunderbird. При открытии зашифрованной электронной почты Enigmail вызывает gpg-agent со связанной программой pinentry и запрашивает пароль. Затем у меня есть возможность установить время жизни для кэшированного пароля, обычно устанавливаемого в конец сеанса.
Поскольку я редко закрываю сеанс или выход из него, я хотел бы заставить gpg-agent забыть все кэшированные пароли при блокировке сеанса. Я искал способ сделать это, и на man-странице gpg-agent говорится, что -SIGHUP сбрасывает все пароли, однако, в отличие от man-страницы, кэшированные пароли не забываются.
Есть идеи, как заставить gpg-agent забыть пароли?
4 ответа
gpgconf --reload gpg-agent
это один из способов заставить агента забыть пароли, которые он кэшировал в памяти. В настоящее время (gpg 2.0-2.1) это [почти] эквивалентно pkill -HUP gpg-agent
, Я говорю "почти эквивалентно", поскольку теоретически у вас может быть запущено несколько агентов, и pkill попытается доставить SIGHUP им всем.
Я использую простое:
echo RELOADAGENT | gpg-connect-agent
Работа как шарм.
TTL для паролей кеша контролируется gpg-agent
Варианты:
--default-cache-ttl n
Set the time a cache entry is valid to n seconds. The default is 600 seconds.
--max-cache-ttl n
Set the maximum time a cache entry is valid to n seconds. After
this time a cache entry will be expired even if it has been accessed
recently. The default is 2 hours (7200 seconds).
Согласно способу управления этим по требованию, если вы можете вызвать команду при блокировке экрана, используя цепочку для ключей для обработки gpg-agent
может быть использован для выполнения
keychain --clear --agents gpg
который убил бы все управляемые экземпляры gpg-agent. Но тогда у вас должен быть способ выполнить keychain --agents gpg --eval $gpg
после разблокировки экрана. Может быть, слишком много хлопот.
Ни один из других ответов не сработает для меня в GnuPG 2.2.19 (Solus 4.1, Nitrokey Smart, токен gnuk для хранения). Я удостоверился только в одном
gpg-agent
работает, и при необходимости он будет отвечать
OK
.
В итоге я сделал следующее:
killall gpg-agent
Вы всегда должны проверять, действительно ли вышеперечисленное привело к тому, что пароли были забыты, расшифровав некоторый зашифрованный файл (gpg -d < somefile.gpg
)
Вот что помогло мне очистить один пароль (т.е. пароль) - запустить с терминала - если вы хотите очистить их все, тогда /questions/247335/zastavit-gpg-agent-zabyit-parol/247344#247344 работает:
gpg-connect-agent "clear_passphrase --mode=normal <cacheid>" /bye
где <cacheid>
скорее всего, доступна клавиатура, если вы выполните:gpg --list-keys --with-keygrip
:
<path to pubring.kbx>
------------------------------------------------
pub rsa2048 2017-12-11 [SC] [expires: 2019-12-11]
<keyid>
Keygrip = <keygrip>
uid `<email>
С небольшой помощью https://web.archive.org/web/20180528210236/https://demu.red/blog/2016/06/how-to-check-if-your-gpg-key-is-in-cache/