Jak korzystać z gpg-agent jak w przypadku ssh-agent + ssh-add?

15

ssh-agentjest bardzo łatwy w użyciu, uruchamiam go i dodam klucze za pomocą ssh-add keyfile. Po zabiciu procesu ssh-agentwszystkie pliki zniknęły.

Jak mogę uzyskać takie samo zachowanie gpg-agent? Najbliższym programem, jaki znalazłem, był gpg-preset-passphrase. Ale patrząc na stronę podręcznikagpg-agent , wydaje się, że tworzony jest katalog do przechowywania kluczy prywatnych.

Mogę się mylić, więc zastanawiam się, jak mogę skonfigurować gpg-agentw taki sposób, aby nie były tworzone żadne pliki / katalogi? Jeśli nie jest to możliwe, mile widziane byłyby także inne sugestie, aby wykonać gpg-agentpracę typu ssh-agent+ ssh-add. Nie szukam rozwiązań GUI takich jak Seahorse.

Lekensteyn
źródło
wymeldowałeś się gpg-connect-agent?
Smithamax,
@Smithamax nie, ale wydaje się, że używa tej samej funkcjonalności z gpg-preset-passphrase. Uciekłem gpg-connect-agent, dostałem powłokę i wykonałem polecenie , a setkey IDOFMYPRIVATEKEYHEREnastępnie preset_passphraseid spowodowało „ERR 67108924 Nieobsługiwany <GPG-agent> - brak --allow-preset-
passphrase

Odpowiedzi:

13

Postanowiłem to rzucić okiem ponownie i dowiedziałem się, jak to działa. GPG używa terminologii „cache” do przechowywania haseł. Na maksymalny czas przechowywania można nałożyć dwa ograniczenia:

  • Czas przechowywania hasła od momentu dodania klucza.
  • Czas zachować hasło od ostatniego dostępu.

Ponadto istnieją dwie odmiany dla obu ograniczeń, jedna dla kluczy GPG i jedna dla kluczy SSH (jeśli obsługa była włączona).

Odpowiednie wpisy strony podręcznika z 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).

Hasła są zawsze buforowane (w pamięci, a nie na dysku! Zweryfikowane za pomocą repozytorium git $HOME), więc nie ma wyraźnej potrzeby ssh-add. Na przykład podpisywanie danych fikcyjnych już wyzwala pamięć podręczną:

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

Aby wprowadzić trwałe zmiany w ustawieniach pamięci podręcznej gpg-agent, edytuj ~ / .gnupg / gpg-agent.conf` i dodaj coś takiego:

default-cache-ttl  60     # Expire GPG keys when unused for 1 minute
max-cache-ttl     600     # Expire GPG keys after 10 minutes since addition

Próbowałem włączyć obsługę agenta SSH przez określenie enable-ssh-support, ale powoduje to, że gpg-agent prosi o inny klucz do zaszyfrowania klucza, a następnie przechowuje Twój klucz prywatny ~/.gnupg/private-keys.d/. Nie idź dla mnie, będę więc trzymał się podwójnego podejścia ssh-agent / gpg-agent.

Kilka porad bonusowych:

  • max-cache-ttl-sshPodczas dodawania klucza można określić ekwiwalent agenta SSH , na przykład:ssh-add -t 600 ~/.ssh/id_rsa
  • Aby zapobiec przechowywaniu hasła GPG w agencie, wyłącz agenta. W nowszych wersjach GPG opcja --no-use-agentjest ignorowana, ale można zapobiec użyciu agenta, usuwając powiązaną zmienną środowiskową. Niektóre sposoby:

    echo | GPG_AGENT_INFO= gpg -s         # temporary
    export GPG_AGENT_INFO=; echo | gpg -s # until the current shell is closed
    
Lekensteyn
źródło
moja maszyna ciągle pyta o hasło
don jasne
@donbright Czy jesteś pewien, że jest tylko jeden gpg-agentaktywny? (Sprawdź listę procesów, na przykład za pomocą ps u -C gpg-agent). Czy limit czasu pamięci podręcznej jest odpowiednio ustawiony? Jeśli używasz go do podpisywania (w przeciwieństwie do uwierzytelniania (SSH)), czy ignore-cache-for-signingopcja nie jest ustawiona?
Lekensteyn
dzięki. moim problemem okazało się to, że używałem gpg 1.4 zamiast gpg 2, w Ubuntu może być mylące, które pakiety należy zainstalować.
don bright