El agente de GPG es una herramienta muy útil para evitar estar metiendo continuamente las contraseñas para desbloquear las claves GPG o en las conexiones SSH. Por desgracia no suele estar habilitado por defecto en la consola, pero vamos a ver como solucionarlo. Esta solución está basada en este comentario.
El kit de la cuestión es que solo puede haber una instancia de gpg-agent por usuario y en cada sesión se tienen que configurar las variables de entorno necesarias. Estas variables las vamos a guardar en el archivo ~/.gpg-agent-info
Primero creamos dos entradas en nuestro crontab que se encargarán de lanzarlo:
$ crontab -e
@reboot umask 0077; rm -f $HOME/.gpg-agent-info; pgrep -U $LOGNAME gpg-agent >/dev/null 2>&1 || gpg-agent --daemon --enable-ssh-support --write-env-file "${HOME}/.gpg-agent-info" >/dev/null 2>&1
*/5 * * * * umask 0077; pgrep -U $LOGNAME gpg-agent >/dev/null 2>&1 || gpg-agent --daemon --enable-ssh-support --write-env-file "${HOME}/.gpg-agent-info" >/dev/null 2>&1
Con la primera línea borraremos este archivo al arrancar el sistema y lanzaremos el demonio. Con la segunda línea comprobamos cada 5 minutos que el demonio está corriendo y en caso contrario, lo lanzamos.
Ahora vamos a modificar el archivo ~/.bash_profile para configurar el entorno. Añadimos las siguientes líneas:
# Launch GPG Agent
GPG_TTY="$(tty)"
export GPG_TTY
if [ -n "$(pgrep -U $LOGNAME gpg-agent)" -a -f ${HOME}/.gpg-agent-info ]; then
. ${HOME}/.gpg-agent-info
export GPG_AGENT_INFO
export SSH_AUTH_SOCK
export SSH_AGENT_PID
echo "GNU Privacy Guard Agent [ENABLED]"
else
unset GPG_AGENT_INFO
unset SSH_AUTH_SOCK
unset SSH_AGENT_PID
if [ -f ${HOME}/.gpg-agent-info ]; then
rm -f ${HOME}/.gpg-agent-info
fi
fi