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

15

ssh-agentest très facile à utiliser, je le démarre et j'ajoute des clés en utilisant ssh-add keyfile. Après avoir tué le processus ssh-agent, tous les fichiers ont disparu.

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

Je peux me tromper, donc je me demande comment je peux configurer gpg-agentde telle manière qu'aucun fichier / répertoire ne soit créé? Si ce n'est pas possible, d'autres suggestions pour faire un gpg-agenttravail comme ssh-agent+ ssh-addseraient également les bienvenues. Je ne recherche pas de solutions GUI comme Seahorse.

Lekensteyn
la source
avez-vous vérifié gpg-connect-agent?
Smithamax
@Smithamax nope, mais il semble utiliser la même fonctionnalité de gpg-preset-passphrase. J'ai couru gpg-connect-agent, obtenu un shell et exécuté, setkey IDOFMYPRIVATEKEYHEREsuivi d'un preset_passphraseidentifiant qui a abouti à "ERR 67108924 <GPG-agent> non pris en charge - pas de phrase de passe prédéfinie"
Lekensteyn

Réponses:

13

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-sshpeut ê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-agentest 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
    
Lekensteyn
la source
ma machine ne cesse de demander la phrase secrète encore et encore
don bright
@donbright Êtes-vous sûr qu'il n'y en a qu'un seul gpg-agentactif? (Vérifiez la liste des processus, par exemple avec ps u -C gpg-agent). Le délai d'expiration du cache est-il correctement défini? Si vous l'utilisez pour la signature (par opposition à l'authentification (SSH)), l' ignore-cache-for-signingoption est-elle désactivée?
Lekensteyn
Merci. mon problème s'est avéré être que j'utilisais gpg 1.4 au lieu de gpg 2, sur ubuntu, cela peut être source de confusion pour les packages que vous êtes censé installer.
Don