Я решил еще раз взглянуть на это и выяснить, как это работает. GPG использует терминологию «кеш» для хранения паролей. На максимальное время хранения могут быть наложены два ограничения:
- Время сохранения ключевой фразы с момента первоначального добавления ключа.
- Время для сохранения ключевой фразы с момента последнего доступа.
Кроме того, существуют два варианта для обоих ограничений: один для ключей GPG и один для ключей SSH (если поддержка включена).
Соответствующие записи на странице руководства от gpg-agent(1)
:
--default-cache-ttl n
Set the time a cache entry is valid to n seconds. The default
is 600 seconds.
--default-cache-ttl-ssh n
Set the time a cache entry used for SSH keys is valid to n sec‐
onds. The default is 1800 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).
--max-cache-ttl-ssh n
Set the maximum time a cache entry used for SSH keys 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).
Парольные фразы всегда кэшируются (в памяти, а не на диске! Проверено с помощью git-репо $HOME
), поэтому в этом нет особой необходимости ssh-add
. Например, подписание фиктивных данных уже запускает кеш:
$ echo | gpg -s >/dev/null
(passphrase requested
$ echo | gpg -s >/dev/null
(signing proceeds without asking for passphrase)
Чтобы внести постоянные изменения в настройки кэша gpg-agent, отредактируйте ~ / .gnupg / gpg-agent.conf` и добавьте что-то вроде:
default-cache-ttl 60 # Expire GPG keys when unused for 1 minute
max-cache-ttl 600 # Expire GPG keys after 10 minutes since addition
Я попытался включить поддержку агента SSH, указав enable-ssh-support
, но это заставляет gpg-agent запрашивать у вас другой ключ для шифрования ключа, а затем сохраняет ваш закрытый ключ ~/.gnupg/private-keys.d/
. Не подходите ко мне, я придерживаюсь подхода двойного ssh-agent / gpg-agent.
Некоторые бонусные советы:
- Эквивалент SSH агента
max-cache-ttl-ssh
может быть указан при добавлении ключа, например:ssh-add -t 600 ~/.ssh/id_rsa
Чтобы предотвратить сохранение парольной фразы GPG в агенте, отключите агент. В более новых версиях GPG этот параметр --no-use-agent
игнорируется, но вы можете запретить использование агента, очистив соответствующую переменную среды. Несколько способов сделать это:
echo | GPG_AGENT_INFO= gpg -s # temporary
export GPG_AGENT_INFO=; echo | gpg -s # until the current shell is closed
gpg-connect-agent
?