Comment puis-je demander à GPG Agent de mettre en cache mon mot de passe?

21

Je suis développeur et je signe généralement mes validations Git avec ma clé GPG. J'ai pu faire fonctionner GPG Agent correctement sur OSX afin qu'il ne me demande mon mot de passe qu'une fois par jour, mais j'ai des problèmes pour que la même chose fonctionne sur Ubuntu 16.04.

Voici ce que je fais:

  • J'ai ma configuration de clés GPG / etc.
  • Je suis dans un répertoire Git.
  • J'ajoute quelques 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: chaque fois que je fais un commit, je suis de nouveau invité à saisir mon mot de passe GPG.

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

J'ai lu des tonnes de documentation et de billets de blog, et voici ce que j'ai essayé jusqu'à présent ...

Tout d'abord, j'ai modifié mon ~/.zshrcfichier (j'utilise zsh) pour définir ce qui suit:

# 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 le redémarrage de gpg-agent, mais ce n'est pas le cas.

Donc, la prochaine chose que j'ai faite a été de définir un ~/.gnupg/gpg-agent.conffichier comme expliqué dans la man gpg-agentpage:

# 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. Quelqu'un peut-il me donner des conseils sur des choses qui pourraient me manquer?

rdegges
la source

Réponses:

24

En plus de configurer les temps de cache dans gpg-agent.conf, vous devez également vous assurer que GnuPG interfère réellement avec gpg-agent. GnuPG 2 et les versions ultérieures le font généralement, mais pas la branche GnuPG 1. Par défaut, git utilise le gpgbinaire qui (au moment d'écrire cette réponse) est toujours GnuPG 1, tandis que GnuPG 2 est installé comme gpg2sur la plupart des systèmes.

Au final, vous avez deux possibilités:

  • configurez git à utilisergpg2 en changeant la configuration de git:

    git config --global gpg.program gpg2
    
  • configurer gpg(GnuPG 1) à utiliser gpg-agenten ajoutant use-agentàgpg.conf
Jens Erat
la source
0

En plus de la réponse ci-dessus, vous pouvez également remplacer la valeur gpgpar défaut de votre système par gpg2plutôt que gpg1.

Si cela git config --global gpg.program gpg2fonctionne pour vous, mais vous ne voulez pas laisser cela dans votre configuration git (dans mon cas, car j'utilise la même configuration sur macOS), vous pouvez simplement échanger la valeur gpgpar défaut .

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 rend gpg1l'ancien gpgbinaire et les liens symboliques /usr/bin/gpg -> /usr/bin/gpg2(avec le nom gnupg et la priorité 50).

Changer la valeur par défaut gpgpourrait en théorie casser certains paquets sur votre système, mais Debian Stretch (la version stable actuelle de Debian) est définie gpg2comme valeurgpg par défaut de la même manière, donc vous ne devriez pas avoir trop de problèmes.

gib
la source