Как использовать gpg-agent как с ssh-agent + ssh-add?

15

ssh-agentочень прост в использовании, я запускаю его и использую ключи ssh-add keyfile. После завершения процесса ssh-agentвсе файлы исчезли.

Как я могу получить такое же поведение с gpg-agent? Самая близкая программа, которую я нашел, была gpg-preset-passphrase. Но, глядя на страницу руководстваgpg-agent , кажется, что каталог создан для хранения закрытых ключей.

Я могу ошибаться, поэтому мне интересно, как я могу настроить gpg-agentтаким образом, чтобы файлы / каталоги не создавались? Если это невозможно, другие предложения, чтобы сделать gpg-agentработу как ssh-agent+ ssh-addтакже приветствуются. Я не ищу такие решения с графическим интерфейсом, как Seahorse.

Lekensteyn
источник
ты проверил gpg-connect-agent?
Smithamax
@Smithamax Нету, но, похоже, использует ту же функциональность от gpg-preset-passphrase. Я побежал gpg-connect-agent, получил оболочку и выполнил, setkey IDOFMYPRIVATEKEYHEREа затем preset_passphraseи id привел к «ERR 67108924 Unsupported <GPG-agent> - no --allow-preset-passphrase»
Lekensteyn

Ответы:

13

Я решил еще раз взглянуть на это и выяснить, как это работает. 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
    
Lekensteyn
источник
моя машина постоянно спрашивает парольную фразу
наденьте яркий
@donbright Вы уверены, что есть только один gpg-agentактивный? (Проверьте список процессов, например, с помощью ps u -C gpg-agent). Правильно ли установлено время ожидания кэша? Если вы используете его для подписи (в отличие от аутентификации (SSH)), ignore-cache-for-signingопция не установлена?
Лекенштейн
Благодарю. Моя проблема оказалась в том, что я использовал gpg 1.4 вместо gpg 2, в Ubuntu может возникнуть путаница, какие пакеты вы должны установить.
Дон Яркий