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-ssh
kann 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-agent
ignoriert. 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
gpg-connect-agent
?