web-dev-qa-db-fra.com

Comment utiliser gpg-agent comme avec ssh-agent + ssh-add?

_ssh-agent_ est très facile à utiliser, je le démarre et ajoute des clés à l'aide de _ssh-add keyfile_. Après la suppression du processus _ssh-agent_, tous les fichiers ont disparu.

Comment puis-je avoir le même comportement avec _gpg-agent_? Le programme le plus proche que j'ai trouvé était gpg-preset-passphrase . Mais en regardant page de manuel de _gpg-agent_ , il semble qu'un répertoire est créé pour stocker les clés privées.

Je peux me tromper, alors je me demande comment configurer _gpg-agent_ de manière à ce qu'aucun fichier/répertoire ne soit créé? Si ce n’est pas possible, d’autres suggestions pour que _gpg-agent_ fonctionne comme _ssh-agent_ + _ssh-add_ seraient également les bienvenues. Je ne cherche pas de solutions graphiques comme Seahorse.

15
Lekensteyn

J'ai décidé d'y jeter un coup d'œil et de découvrir 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:

  • Le temps de conserver une phrase secrète depuis que la clé a été ajoutée initialement.
  • Il est temps de conserver une phrase secrète depuis le dernier accès.

De plus, il existe deux variantes pour les deux contraintes, une pour les clés GPG et une pour les clés SSH (si le support a été activé).

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 disque! Vérifié avec un dépôt Git de $HOME), de sorte qu'il n'y a pas de besoin explicite de 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 le fichier ~/.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 le support des agents SSH en spécifiant enable-ssh-support, mais cela oblige l'agent gpg à vous demander une autre clé pour chiffrer la clé, puis stocke votre clé privée dans ~/.gnupg/private-keys.d/. Non, partez pour moi, je vais m'en tenir à une approche double ssh-agent/gpg-agent.

Quelques astuces bonus:

  • L'équivalent de max-cache-ttl-ssh de l'agent 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 GPG plus récentes, 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
    
13
Lekensteyn