Comment configurer gpg pour saisir la phrase secrète une seule fois par session

18

Est-il possible de configurer gpgde manière à ce que je saisisse la phrase secrète une seule fois, et cela fonctionnera-t-il pour toute la session (j'utilise Ubuntu/XFce)?

Je ne sais pas comment cela gpgfonctionne, il semble que la fonction par défaut est celle qui gpgdemande gpg-agentla phrase secrète et l'agent exécute la saisie par code PIN pour demander la phrase secrète.

Je voudrais utiliser les cursus de pinentry une seule fois par session, donc je peux coller ma phrase secrète (j'ai une hexchaîne d'une phrase - j'utilise echo -n <SENTENCE> | str-hex) et signer les e-mails de Claws Mail sans mettre de phrase secrète (vous ne pouvez pas utiliser les cursus de pinentry avec Claws Courrier).

jcubic
la source

Réponses:

16

Vous pouvez utiliser la technique décrite sur cette page:

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

Voici l'essentiel:

  1. Installez le programme gpg-agent et pinentry:

    sudo apt-get install gnupg-agent pinentry-curses
    
  2. Ajoutez les lignes ci-dessous à ~/.profile. Tout shell de confirmation POSIX doit inclure ce fichier.

    # 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
    

    Ce petit script sera activé lors de votre connexion. Si l'agent n'est pas en cours d'exécution, il sera démarré. Lorsque l'agent est démarré, il montre comment définir des variables d'environnement afin de s'y connecter. Le script enregistre ces valeurs dans ~/.gpg-agent-info, de sorte que lorsque vous démarrez une autre session de connexion, le script peut configurer correctement les variables et donc utiliser l'agent.

Vous n'aurez à saisir votre mot de passe qu'une seule fois par démarrage. L'agent stockera vos clés en mémoire, vous n'aurez donc pas à saisir à nouveau la phrase secrète.

janos
la source
J'utilisais ce script avec bonheur, mais il échouerait au hasard. Finalement, j'ai modifié le conditionnel 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` ]] ; thenet cela a bien fonctionné. Le problème est que le script ci-dessus vérifie si le processus en .gpg-agent-infoest actif et accepte les signaux avec kill -0. Si un processus existe, mais pas gpg-agent, nous obtenons le mauvais comportement. Le code joint vérifie que nous avons le bon processus.
wyer33