So konfigurieren Sie gpg für die einmalige Eingabe einer Passphrase pro Sitzung

18

Ist es möglich gpg, die Passphrase so zu konfigurieren , dass sie nur einmal eingegeben wird und für die gesamte Sitzung (die ich verwende Ubuntu/XFce) funktioniert ?

Ich bin mir nicht sicher, wie das gpgfunktioniert. Die Standardfunktion gpgfragt gpg-agentnach der Passphrase und der Agent führt die PIN-Eingabe aus, um nach der Passphrase zu fragen.

Ich möchte Pinentry-Curses nur einmal pro Sitzung verwenden, also kann ich meine Passphrase einfügen (ich habe eine hexZeichenfolge aus einem Satz - ich verwende echo -n <SENTENCE> | str-hex) und E-Mails von Claws Mail signieren, ohne eine Passphrase zu setzen (Sie können Pinentry-Curses nicht mit Claws verwenden Mail).

jcubic
quelle

Antworten:

16

Sie können die auf dieser Seite beschriebene Technik anwenden:

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

Hier ist das Wesentliche:

  1. Installieren Sie gpg-agent und pinentry:

    sudo apt-get install gnupg-agent pinentry-curses
    
  2. Fügen Sie die Zeilen darunter zu hinzu ~/.profile. Jede POSIX-bestätigende Shell sollte diese Datei enthalten.

    # 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
    

    Dieses kleine Skript wird beim Einloggen aktiviert. Wenn der Agent nicht ausgeführt wird, wird er gestartet. Wenn der Agent gestartet wird, wird gezeigt, wie Umgebungsvariablen festgelegt werden, um eine Verbindung zu ihm herzustellen. Das Skript speichert diese Werte in ~/.gpg-agent-info, damit das Skript beim Starten einer anderen Anmeldesitzung die Variablen korrekt einrichten und somit den Agenten verwenden kann.

Sie müssen Ihre Passphrase nur einmal pro Start eingeben. Der Agent speichert Ihre Schlüssel im Speicher, sodass Sie die Passphrase nicht erneut eingeben müssen.

janos
quelle
Ich habe dieses Skript gerne benutzt, aber es würde nach dem Zufallsprinzip fehlschlagen. Irgendwann habe ich die Bedingung dazu geändert 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` ]] ; thenund es hat gut funktioniert. Das Problem ist, dass das obige Skript prüft, ob der Prozess aktiv .gpg-agent-infoist und Signale mit akzeptiert kill -0. Wenn es einen Prozess gibt, aber nicht gpg-agent, bekommen wir das falsche Verhalten. Der beigefügte Code prüft, ob wir den richtigen Prozess haben.
Wyer33