Як я можу використовувати gpg-агент як для 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.


Ви перевірили gpg-connect-agent?
Смітмакс

@Smithamax nope, але, здається, використовується однаковий функціонал від gpg-preset-passphrase. Я біг gpg-connect-agent, отримав оболонку і виконав, setkey IDOFMYPRIVATEKEYHEREа потім preset_passphraseі ідентифікатор призвів до "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 repo $HOME), тому явної потреби в цьому немає ssh-add. Наприклад, підписання фіктивних даних запускає кеш-пам'ять:

$ echo | gpg -s >/dev/null
(passphrase requested
$ echo | gpg -s >/dev/null
(signing proceeds without asking for passphrase)

Щоб внести постійні зміни до налаштувань кешу gpg-агента, відредагуйте ~ / .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-агент запитати вас про інший ключ для шифрування ключа, а потім зберігає ваш приватний ключ у ~/.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
    

моя машина продовжує просити парольну фразу знову і знову
нехай яскраво

@donbright Ви впевнені, що є лише один gpg-agentактивний? (Перевірте список процесів, наприклад, з ps u -C gpg-agent). Чи правильно встановлений тайм-аут кешу? Якщо ви використовуєте його для підписання (на відміну від автентифікації (SSH)), ignore-cache-for-signingваріант не встановлений?
Лекенштейн

Спасибі. моя проблема виявилася в тому, що я використовував gpg 1.4 замість gpg 2, на ubuntu це може заплутати, які пакунки ви повинні встановити.
нехай яскравий
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.