Come posso ottenere GPG Agent per memorizzare nella cache la mia password?


21

Sono uno sviluppatore e in genere firmo i miei commit Git con la mia chiave GPG. Sono stato in grado di far funzionare correttamente GPG Agent su OSX in modo che mi chieda la mia password solo una volta al giorno, ma ho problemi a far funzionare la stessa cosa su Ubuntu 16.04.

Ecco cosa sto facendo:

  • Ho le mie chiavi GPG configurate / ecc.
  • Sono in una directory Git.
  • Aggiungo alcuni file a Git.
  • Vado quindi a impegnarli ( git commit) e ottengo una richiesta di password GPG che assomiglia a questa:

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

Il problema è: ogni volta che eseguo un commit, mi viene nuovamente richiesta la password GPG.

Quello che mi piacerebbe fare è configurare GPG Agent per memorizzare nella cache la mia password per 1 giorno intero, quindi deve essere inserito solo una volta.

Ho letto tonnellate di documentazione e post di blog, ed ecco cosa ho provato finora ...

Innanzitutto, ho modificato il mio ~/.zshrcfile (utilizzo zsh) per impostare quanto segue:

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

Ora, da quello che ho letto, questo da solo dovrebbe fare il trucco dopo aver riavviato gpg-agent, ma non lo fa.

Quindi, la prossima cosa che ho fatto è stato definire un ~/.gnupg/gpg-agent.conffile come spiegato nella man gpg-agentpagina:

# 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

Anche questo non ha alcun effetto.

Ho anche provato vari metodi di blog, ecc., Ma nulla sembra funzionare. Qualcuno può darmi alcuni suggerimenti su cose che potrei perdere?

Risposte:


24

Oltre a impostare i tempi di cache in gpg-agent.conf, devi anche assicurarti che GnuPG stia effettivamente interfaccia gpg-agent. GnuPG 2 e verso l'alto generalmente lo fanno, ma il ramo GnuPG 1 no. Di default git usa il gpgbinario, che (al momento della stesura di questa risposta) è ancora GnuPG 1, mentre GnuPG 2 è installato come gpg2sulla maggior parte dei sistemi.

Alla fine, hai due possibilità:

  • imposta git da usaregpg2 cambiando la configurazione di git:

    git config --global gpg.program gpg2
    
  • impostare gpg(GnuPG 1) da utilizzare gpg-agentaggiungendo use-agentagpg.conf

0

Oltre alla risposta di cui sopra, puoi anche cambiare l'impostazione predefinita gpgnel tuo sistema gpg2piuttosto che gpg1.

Se git config --global gpg.program gpg2funziona per te, ma non vuoi lasciarlo nella tua configurazione di git (nel mio caso perché uso la stessa configurazione su macOS), puoi semplicemente scambiare il default gpg.

Ho seguito la guida qui , che era solo:

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

Questo rende gpg1il vecchio gpgbinario e i collegamenti simbolici /usr/bin/gpg -> /usr/bin/gpg2(con nome gnupg e priorità 50).

Cambiare il default gpgpotrebbe teoricamente rompere alcuni pacchetti sul tuo sistema, ma Debian Stretch (l'attuale versione stabile di Debian) imposta gpg2il defaultgpg in modo simile, quindi non dovresti avere troppi problemi.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.