Decidí echarle un vistazo a esto nuevamente y descubrí cómo funciona. GPG utiliza la terminología "caché" para almacenar contraseñas. Se pueden imponer dos restricciones al tiempo máximo de almacenamiento:
- El tiempo para mantener una frase de contraseña desde que se agregó la clave inicialmente.
- El tiempo para mantener una frase de contraseña desde que se accedió por última vez.
Además, existen dos variaciones para ambas restricciones, una para las claves GPG y otra para las claves SSH (si el soporte estaba habilitado).
Las entradas relevantes de la página del manual 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).
Las frases de contraseña siempre se almacenan en caché (en la memoria, ¡no en el disco! Verificadas con un repositorio git de $HOME
), por lo que no hay una necesidad explícita de hacerlo ssh-add
. Por ejemplo, firmar datos ficticios ya activa el caché:
$ echo | gpg -s >/dev/null
(passphrase requested
$ echo | gpg -s >/dev/null
(signing proceeds without asking for passphrase)
Para realizar cambios permanentes en la configuración de caché de gpg-agent, edite ~ / .gnupg / gpg-agent.conf` y agregue algo como:
default-cache-ttl 60 # Expire GPG keys when unused for 1 minute
max-cache-ttl 600 # Expire GPG keys after 10 minutes since addition
Intenté habilitar el soporte del agente SSH especificando enable-ssh-support
, pero esto hace que el agente gpg le pida otra clave para cifrar la clave, y luego almacena su clave privada ~/.gnupg/private-keys.d/
. No va por mí, entonces me apegaré a un enfoque dual ssh-agent / gpg-agent.
Algunos consejos extra:
- El equivalente del agente SSH
max-cache-ttl-ssh
se puede especificar al agregar la clave, por ejemplo:ssh-add -t 600 ~/.ssh/id_rsa
Para evitar almacenar la frase de contraseña GPG en el agente, desactive el agente. En las versiones más recientes de GPG, la opción --no-use-agent
se ignora, pero puede evitar que se use el agente borrando la variable de entorno relacionada. Algunas formas de hacerlo:
echo | GPG_AGENT_INFO= gpg -s # temporary
export GPG_AGENT_INFO=; echo | gpg -s # until the current shell is closed
gpg-connect-agent
?