Wie verwende ich gpg-agent wie mit ssh-agent + ssh-add?

15

ssh-agentist sehr einfach zu bedienen, ich starte es und füge Schlüssel mit ssh-add keyfile. Nach dem Beenden des Vorgangs ssh-agentsind alle Dateien verschwunden.

Wie kann ich das gleiche Verhalten mit bekommen gpg-agent? Das nächste Programm, das ich gefunden habe, war gpg-preset-passphrase. Auf der Handbuchseite vongpg-agent scheint jedoch ein Verzeichnis zum Speichern privater Schlüssel erstellt worden zu sein.

Ich könnte mich irren, also frage ich mich, wie ich so einrichten kann gpg-agent, dass keine Dateien / Verzeichnisse erstellt werden? Wenn es nicht möglich ist, wären auch andere Vorschläge für gpg-agentArbeiten wie ssh-agent+ ssh-addwillkommen. Ich suche keine GUI-Lösungen wie Seahorse.

Lekensteyn
quelle
haben Sie ausgecheckt gpg-connect-agent?
Smithamax
@Smithamax nein, aber es scheint die gleiche Funktionalität von zu verwenden gpg-preset-passphrase. Ich lief gpg-connect-agent, bekam eine Shell und ausgeführt, setkey IDOFMYPRIVATEKEYHEREgefolgt von preset_passphraseund ID führte zu "ERR 67108924 Nicht unterstützte <GPG-Agent> - keine --allow-Preset-Passphrase"
Lekensteyn

Antworten:

13

Ich habe beschlossen, mir das noch einmal anzuschauen und herauszufinden, wie es funktioniert. GPG verwendet die Terminologie "Cache" zum Speichern von Passwörtern. Für die maximale Speicherzeit können zwei Einschränkungen festgelegt werden:

  • Die Zeit, um eine Passphrase zu behalten, seit der Schlüssel ursprünglich hinzugefügt wurde.
  • Die Zeit, die seit dem letzten Zugriff für die Speicherung einer Passphrase vergangen ist.

Darüber hinaus gibt es zwei Varianten für beide Einschränkungen, eine für GPG-Schlüssel und eine für SSH-Schlüssel (sofern die Unterstützung aktiviert war).

Die entsprechenden Handbuchseiteneinträge von 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).

Passphrasen werden immer zwischengespeichert (im Speicher, nicht auf der Festplatte! Verifiziert mit einem Git-Repo von $HOME), sodass dies nicht explizit erforderlich ist ssh-add. Wenn Sie beispielsweise Dummy-Daten signieren, wird der Cache bereits ausgelöst:

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

Um die Cache-Einstellungen von gpg-agent dauerhaft zu ändern, bearbeiten Sie ~ / .gnupg / gpg-agent.conf` und fügen Sie Folgendes hinzu:

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

Ich habe versucht, die SSH-Agentenunterstützung durch Angabe von zu aktivieren enable-ssh-support, aber dies veranlasst den gpg-Agenten, Sie nach einem anderen Schlüssel zum Verschlüsseln des Schlüssels zu fragen, und speichert dann Ihren privaten Schlüssel in ~/.gnupg/private-keys.d/. Ich werde mich dann an einen dualen Ansatz von ssh-agent / gpg-agent halten.

Einige Bonus-Tipps:

  • Das Äquivalent des SSH-Agenten zu max-cache-ttl-sshkann beim Hinzufügen des Schlüssels angegeben werden. Beispiel:ssh-add -t 600 ~/.ssh/id_rsa
  • Deaktivieren Sie den Agenten, um das Speichern der GPG-Passphrase im Agenten zu verhindern. In neueren GPG-Versionen wird die Option --no-use-agentignoriert. Sie können jedoch die Verwendung des Agenten verhindern, indem Sie die zugehörige Umgebungsvariable löschen. Einige Möglichkeiten, dies zu tun:

    echo | GPG_AGENT_INFO= gpg -s         # temporary
    export GPG_AGENT_INFO=; echo | gpg -s # until the current shell is closed
    
Lekensteyn
quelle
mein Gerät fragt immer wieder nach der Passphrase
don bright
@donbright Bist du sicher, dass nur einer gpg-agentaktiv ist? (Prozessliste überprüfen, z. B. mit ps u -C gpg-agent). Ist das Cache-Timeout richtig eingestellt? Wenn Sie es zum Signieren verwenden (im Gegensatz zur (SSH) -Authentifizierung), ist die ignore-cache-for-signingOption deaktiviert?
Lekensteyn
Vielen Dank. mein problem stellte sich heraus, dass ich gpg 1.4 anstelle von gpg 2 verwendete, auf ubuntu kann es verwirrend sein, welche pakete man installieren soll.
Don Bright