Cómo usar GPG agent

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
Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s