web-dev-qa-db-fra.com

Comment puis-je obtenir que GPG Agent mette en cache mon mot de passe?

Je suis un développeur et je signe généralement mes commits Git avec ma clé GPG. J'ai pu obtenir que GPG Agent fonctionne correctement sous OSX, de sorte qu'il ne me demande mon mot de passe qu'une fois par jour, mais je ne parviens pas à faire fonctionner la même chose sous Ubuntu 16.04.

Voici ce que je fais:

  • J'ai la configuration de mes clés GPG/etc.
  • Je suis dans un répertoire Git.
  • J'ajoute des fichiers à Git.
  • Je vais ensuite les valider (git commit) et obtenir une demande de mot de passe GPG qui ressemble à ceci:

    $ git ci
    
    You need a passphrase to unlock the secret key for
    user: "Randall Degges <[email protected]>"
    4096-bit RSA key, ID 8F700DA2, created 2016-04-05
    
    [master 1740961] blah
     1 file changed, 1 insertion(+)
    

Le problème est le suivant: chaque fois que je fais un commit, je suis à nouveau invité à entrer mon mot de passe GPG.

Ce que j'aimerais faire, c'est configurer GPG Agent pour qu'il mette en cache mon mot de passe pendant une journée complète. Il ne doit donc être saisi qu'une seule fois.

J'ai lu des tonnes de documentation et de billets de blog et voici ce que j'ai déjà essayé ...

Tout d'abord, j'ai modifié mon fichier ~/.zshrc (j'utilise zsh) pour définir les éléments suivants:

# GPG Agent
export GPG_TTY=$(tty)
export GPGKEY=8F700DA2

Maintenant, d'après ce que j'ai lu, cela seul devrait faire l'affaire après avoir redémarré gpg-agent, mais ce n'est pas le cas.

J'ai ensuite défini un fichier ~/.gnupg/gpg-agent.conf comme expliqué dans la page man gpg-agent:

# Set the default cache time to 1 day.
default-cache-ttl       86400
default-cache-ttl-ssh   86400

# Set the max cache time to 30 days.
max-cache-ttl           2592000
max-cache-ttl-ssh       2592000

Cela n'a également aucun effet.

J'ai également essayé diverses méthodes de blog, etc., mais rien ne semble fonctionner. Est-ce que quelqu'un peut me donner des indications sur des choses qui pourraient me manquer?

21
rdegges

En plus de configurer les temps de cache dans gpg-agent.conf, vous devez également vous assurer que GnuPG est en train d'interfacer le gpg-agent. GnuPG 2 et les versions supérieures en général, contrairement à la branche GnuPG 1. Par défaut, git utilise le binaire gpg, qui (au moment de l'écriture de cette réponse) est toujours GnuPG 1, alors que GnuPG 2 est installé en tant que gpg2 sur la plupart des systèmes.

Au final, vous avez des possibilités:

  • configurez git pour utiliser gpg2 en modifiant la configuration de git:

    git config --global gpg.program gpg2
    
  • configurez gpg (GnuPG 1) pour qu'il utilise gpg-agent en ajoutant use-agent à gpg.conf
24
Jens Erat

En plus de la réponse ci-dessus, vous pouvez également modifier la valeur par défaut gpg de votre système en gpg2 au lieu de gpg1.

Si git config --global gpg.program gpg2 fonctionne pour vous, mais que vous ne voulez pas laisser cela dans votre configuration git (dans mon cas parce que j'utilise la même configuration sur macOS), vous pouvez simplement échanger le nom par défaut gpg.

J'ai suivi le guide ici , qui était juste:

$ Sudo mv /usr/bin/gpg /usr/bin/gpg1
$ Sudo update-alternatives --verbose --install /usr/bin/gpg gnupg /usr/bin/gpg2 50

Cela fait de gpg1 l'ancien binaire gpg et des liens symboliques /usr/bin/gpg -> /usr/bin/gpg2 (nommés gnupg et priorité 50).

Changer le nom par défaut gpg pourrait théoriquement détruire certains paquets sur votre système, mais Debian Stretch (la version stable actuelle de Debian) définit gpg2 comme nom par défaut gpg de la même manière, vous ne devriez donc pas en avoir aussi beaucoup de problèmes.

0
gib