Come configurare gpg per inserire la passphrase una sola volta per sessione


18

È possibile configurare gpgin modo da inserire la passphrase una sola volta e funzionerà per l'intera sessione (che sto usando Ubuntu/XFce)?

Non sono sicuro di come gpgfunzioni, sembra che la funzione predefinita sia quella che gpgrichiede gpg-agentla passphrase e l'agente esegue la pin-entry per chiedere la passphrase.

Vorrei usare maledizioni pinentry solo una volta per sessione, quindi posso incollare la mia passphrase (ho una hexstringa da una frase - uso echo -n <SENTENCE> | str-hex) e firmare e-mail da Claws Mail senza mettere passphrase (non puoi usare maledizioni pinentry con Claws mail).

Risposte:


16

Puoi usare la tecnica descritta in questa pagina:

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

Ecco l'essenza:

  1. Installa il programma gpg-agent e pinentry:

    sudo apt-get install gnupg-agent pinentry-curses
    
  2. Aggiungi le righe sottostanti a ~/.profile. Qualsiasi shell di conferma POSIX dovrebbe includere questo file.

    # 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
    

    Questo piccolo script verrà attivato al momento del login. Se l'agente non è in esecuzione, verrà avviato. Quando viene avviato, l'agente mostra come impostare le variabili di ambiente per connettersi ad esso. Lo script salva questi valori in ~/.gpg-agent-infomodo che quando si avvia un'altra sessione di accesso lo script possa impostare correttamente le variabili e quindi utilizzare l'agente.

Dovrai inserire la passphrase solo una volta per avvio. L'agente memorizzerà le chiavi in ​​memoria, quindi non è necessario inserire nuovamente la passphrase.


Avevo usato questa sceneggiatura felicemente, ma avrebbe fallito a caso. Alla fine, ho modificato il condizionale a questo 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` ]] ; thene ha funzionato bene. Il problema è che lo script sopra verifica se il processo .gpg-agent-infoè attivo e accetta segnali con kill -0. Se esiste un processo, ma no gpg-agent, otteniamo un comportamento sbagliato. Il codice allegato verifica che abbiamo il processo giusto.
wyer33,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.