¿Cómo puedo hacer que GPG Agent guarde en caché mi contraseña?

21

Soy desarrollador, y comúnmente firmo mis confirmaciones de Git con mi clave GPG. He podido hacer que el Agente GPG funcione correctamente en OSX, de modo que solo me pide mi contraseña una vez al día, pero tengo problemas para que funcione lo mismo en Ubuntu 16.04.

Esto es lo que estoy haciendo:

  • Tengo mis claves GPG configuradas / etc.
  • Estoy en un directorio de Git.
  • Agrego algunos archivos a Git.
  • Luego voy a confirmarlos ( git commit) y obtengo una solicitud de contraseña GPG que se ve así:

    $ 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(+)
    

El problema es: cada vez que hago una confirmación, se me solicita nuevamente mi contraseña GPG.

Lo que me gustaría hacer es configurar GPG Agent para almacenar en caché mi contraseña durante 1 día completo, por lo que solo debe ingresarse una vez.

He leído toneladas de documentación y publicaciones de blog, y esto es lo que he intentado hasta ahora ...

Primero, modifiqué mi ~/.zshrcarchivo (uso zsh) para configurar lo siguiente:

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

Ahora, por lo que leí, esto solo debería hacer el truco después de reiniciar gpg-agent, pero no es así.

Entonces, lo siguiente que hice fue definir un ~/.gnupg/gpg-agent.confarchivo como se explica en la man gpg-agentpágina:

# 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

Esto tampoco tiene efecto.

También probé varios métodos de blog, etc., pero nada parece funcionar. ¿Alguien puede darme algunos consejos sobre las cosas que me faltan?

rdegges
fuente

Respuestas:

24

Además de configurar los tiempos de caché gpg-agent.conf, también debe asegurarse de que GnuPG realmente esté interactuando con el gpg-agent. GnuPG 2 y hacia arriba generalmente lo hace, pero la rama GnuPG 1 no. Por defecto, git está utilizando el gpgbinario, que (al momento de escribir esta respuesta) todavía es GnuPG 1, mientras que GnuPG 2 está instalado como gpg2en la mayoría de los sistemas.

Al final, tienes dos posibilidades:

  • configure git para usargpg2 cambiando la configuración de git:

    git config --global gpg.program gpg2
    
  • configurar gpg(GnuPG 1) para usar gpg-agentagregando use-agentagpg.conf
Jens Erat
fuente
0

Además de la respuesta anterior, también puede cambiar el valor predeterminado gpgen su sistema a en gpg2lugar de hacerlo gpg1.

Si git config --global gpg.program gpg2funciona para usted, pero no desea dejar eso en su configuración de git (en mi caso porque uso la misma configuración en macOS), puede cambiar la configuración predeterminada gpg.

Seguí la guía aquí , que era solo:

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

Esto hace que gpg1el gpgbinario antiguo y los enlaces simbólicos /usr/bin/gpg -> /usr/bin/gpg2(con nombre gnupg y prioridad 50).

Cambiar el valor predeterminado gpgpodría, en teoría, romper algunos paquetes en su sistema, pero Debian Stretch (la versión estable actual de Debian) establece gpg2el valor predeterminadogpg de manera similar, por lo que no debería tener demasiados problemas.

Gibraltar
fuente