Jak skonfigurować gpg, aby wprowadzał hasło tylko raz na sesję

18

Czy jest możliwe skonfigurowanie gpgw taki sposób, że wprowadzam hasło tylko raz i będzie działać przez całą sesję (używam Ubuntu/XFce)?

Nie jestem pewien, jak to gpgdziała, wydaje się, że domyślną funkcją jest gpgzapytanie gpg-agento hasło, a agent uruchamia wprowadzanie kodu PIN, aby poprosić o hasło.

Chciałbym używać przekleństw pinentry tylko raz na sesję, więc mogę wkleić moje hasło (mam hexciąg z zdania - używam echo -n <SENTENCE> | str-hex) i podpisać e-mail z Claws Mail bez umieszczania hasła (nie możesz używać przekleństw z Pinawrami Poczta).

jcubic
źródło

Odpowiedzi:

16

Możesz użyć techniki opisanej na tej stronie:

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

Oto sedno:

  1. Zainstaluj gpg-agent i program pinentry:

    sudo apt-get install gnupg-agent pinentry-curses
    
  2. Dodaj poniższe linie do ~/.profile. Każda powłoka potwierdzająca POSIX powinna zawierać ten plik.

    # 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
    

    Ten mały skrypt zostanie aktywowany po zalogowaniu. Jeśli agent nie działa, zostanie uruchomiony. Po uruchomieniu agent pokazuje, jak ustawić zmienne środowiskowe, aby się z nim połączyć. Skrypt zapisuje te wartości ~/.gpg-agent-info, aby po rozpoczęciu kolejnej sesji logowania mógł poprawnie ustawić zmienne i tym samym użyć agenta.

Będziesz musiał wpisać hasło tylko raz na rozruch. Agent zapisze twoje klucze w pamięci, więc nie musisz ponownie wprowadzać hasła.

janos
źródło
Z radością korzystałem z tego skryptu, ale nie udałoby mu się to losowo. W końcu zmodyfikowałem warunek do tego 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` ]] ; theni działało dobrze. Problem polega na tym, że powyższy skrypt sprawdza, czy proces .gpg-agent-infojest aktywny i akceptuje sygnały za pomocą kill -0. Jeśli proces istnieje, ale nie gpg-agent, otrzymujemy niewłaściwe zachowanie. Załączony kod sprawdza, czy mamy odpowiedni proces.
wyer33