Cómo configurar gpg para ingresar la frase de contraseña solo una vez por sesión

18

¿Es posible configurar gpgde una manera que ingrese la frase de contraseña solo una vez, y funcionará durante toda la sesión (estoy usando Ubuntu/XFce)?

No estoy seguro de cómo gpgfunciona, parece que la función predeterminada es que gpgsolicita gpg-agentla frase de contraseña y el agente ejecuta pin-entry para solicitar la frase de contraseña.

Me gustaría usar pinentry-curses solo una vez por sesión, para poder pegar mi frase de contraseña (tengo una hexcadena de una oración, la uso echo -n <SENTENCE> | str-hex) y firmar el correo electrónico de Claws Mail sin poner la frase de contraseña (no puedes usar pinentry-curses con Claws Correo).

jcubic
fuente

Respuestas:

16

Puede usar la técnica descrita en esta página:

http://fvue.nl/wiki/Debian_4.0:_Installing_gpg-agent

Aquí está la esencia:

  1. Instale el programa gpg-agent y pinentry:

    sudo apt-get install gnupg-agent pinentry-curses
    
  2. Agregue las líneas a continuación a ~/.profile. Cualquier shell de confirmación POSIX debe incluir este archivo.

    # Invoke GnuPG-Agent the first time we login.
    # Does `~/.gpg-agent-info' exist and points to gpg-agent process accepting signals?
    if test -f $HOME/.gpg-agent-info && \
        kill -0 `cut -d: -f 2 $HOME/.gpg-agent-info` 2>/dev/null; then
        GPG_AGENT_INFO=`cat $HOME/.gpg-agent-info | cut -c 16-`
    else
        # No, gpg-agent not available; start gpg-agent
        eval `gpg-agent --daemon --no-grab --write-env-file $HOME/.gpg-agent-info`
    fi
    export GPG_TTY=`tty`
    export GPG_AGENT_INFO
    

    Este pequeño script se activará cuando inicies sesión. Si el agente no se está ejecutando, se iniciará. Cuando se inicia el agente, muestra cómo establecer variables de entorno para conectarse a él. El script guarda estos valores ~/.gpg-agent-info, de modo que cuando inicia otra sesión de inicio de sesión, el script puede configurar las variables correctamente y, por lo tanto, usar el agente.

Solo tendrá que ingresar su frase de contraseña una vez por arranque. El agente almacenará sus claves en la memoria, para que no tenga que ingresar la frase de contraseña nuevamente.

janos
fuente
Había estado usando este script felizmente, pero fallaba al azar. Finalmente, modifiqué el condicional a esto GPG_PROCESS=`cut -d: -f 2 $HOME/.gpg-agent-info` if test -f $HOME/.gpg-agent-info && \ kill -0 ${GPG_PROCESS} 2>/dev/null && \ [[ ${GPG_PROCESS} == `pgrep -x -u "${USER}" gpg-agent` ]] ; theny funcionó bien. El problema es que el script anterior verifica si el proceso .gpg-agent-infoestá activo y acepta señales con kill -0. Si hay un proceso, pero no gpg-agent, obtenemos el comportamiento incorrecto. El código adjunto verifica que tenemos el proceso correcto.
wyer33