J'ai décidé de revoir cela et j'ai découvert comment cela fonctionne. GPG utilise la terminologie "cache" pour stocker les mots de passe. Deux contraintes peuvent être imposées sur la durée maximale de stockage:
- Durée de conservation d'une phrase secrète depuis l'ajout initial de la clé.
- Durée de conservation d'une phrase secrète depuis son dernier accès.
De plus, deux variantes existent pour les deux contraintes, une pour les clés GPG et une pour les clés SSH (si la prise en charge était activée).
Les entrées de page de manuel pertinentes de 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).
Les phrases secrètes sont toujours mises en cache (en mémoire, pas sur le disque! Vérifiées avec un dépôt git de $HOME
), il n'y a donc pas de besoin explicite ssh-add
. Par exemple, la signature de données factices déclenche déjà le cache:
$ echo | gpg -s >/dev/null
(passphrase requested
$ echo | gpg -s >/dev/null
(signing proceeds without asking for passphrase)
Pour apporter des modifications permanentes aux paramètres de cache de gpg-agent, éditez ~ / .gnupg / gpg-agent.conf` et ajoutez quelque chose comme:
default-cache-ttl 60 # Expire GPG keys when unused for 1 minute
max-cache-ttl 600 # Expire GPG keys after 10 minutes since addition
J'ai essayé d'activer la prise en charge de l'agent SSH en spécifiant enable-ssh-support
, mais cela fait que l'agent gpg vous demande une autre clé pour crypter la clé, puis stocke votre clé privée dans ~/.gnupg/private-keys.d/
. Non, allez-y, je m'en tiendrai alors à une double approche ssh-agent / gpg-agent.
Quelques conseils bonus:
- L'équivalent d'agent SSH de
max-cache-ttl-ssh
peut être spécifié lors de l'ajout de la clé, par exemple:ssh-add -t 600 ~/.ssh/id_rsa
Pour éviter de stocker la phrase secrète GPG dans l'agent, désactivez l'agent. Dans les versions plus récentes de GPG, l'option --no-use-agent
est ignorée, mais vous pouvez empêcher l'utilisation de l'agent en effaçant la variable d'environnement associée. Quelques façons de le faire:
echo | GPG_AGENT_INFO= gpg -s # temporary
export GPG_AGENT_INFO=; echo | gpg -s # until the current shell is closed
gpg-connect-agent
?