Jak mogę sprawić, by Agent GPG buforował moje hasło?

21

Jestem programistą i często podpisuję swoje zobowiązania w Git za pomocą mojego klucza GPG. Udało mi się sprawić, aby GPG Agent działał poprawnie na OSX, tak że prosi mnie tylko o hasło raz dziennie, ale mam problemy z uzyskaniem tego samego działania na Ubuntu 16.04.

Oto co robię:

  • Mam skonfigurowane klucze GPG / itp.
  • Jestem w katalogu Git.
  • Dodaję pliki do Gita.
  • Następnie przechodzę do ich zatwierdzenia ( git commit) i otrzymuję żądanie hasła GPG, które wygląda następująco:

    $ git ci
    
    You need a passphrase to unlock the secret key for
    user: "Randall Degges <[email protected]>"
    4096-bit RSA key, ID 8F700DA2, created 2016-04-05
    
    [master 1740961] blah
     1 file changed, 1 insertion(+)
    

Problem polega na tym: za każdym razem, gdy dokonuję zatwierdzenia, ponownie pojawia się monit o podanie mojego hasła GPG.

Chciałbym skonfigurować Agenta GPG, aby buforował moje hasło przez 1 cały dzień, więc należy je wprowadzić tylko raz.

Przeczytałem mnóstwo dokumentacji i postów na blogu, a oto, co próbowałem do tej pory ...

Najpierw zmodyfikowałem ~/.zshrcplik (używam zsh), aby ustawić następujące ustawienia:

# GPG Agent
export GPG_TTY=$(tty)
export GPGKEY=8F700DA2

Teraz, z tego co przeczytałem, to samo powinno załatwić sprawę po ponownym uruchomieniu gpg-agent, ale tak nie jest.

Następną rzeczą, którą zrobiłem, było zdefiniowanie ~/.gnupg/gpg-agent.confpliku zgodnie z opisem na man gpg-agentstronie:

# Set the default cache time to 1 day.
default-cache-ttl       86400
default-cache-ttl-ssh   86400

# Set the max cache time to 30 days.
max-cache-ttl           2592000
max-cache-ttl-ssh       2592000

To również nie ma wpływu.

Próbowałem też różnych metod blogowania itp., Ale wydaje się, że nic nie działa. Czy ktoś może dać mi wskazówki na temat rzeczy, które mogą mi brakować?

rdegges
źródło

Odpowiedzi:

24

Oprócz ustawiania czasów pamięci podręcznej gpg-agent.conf, musisz również upewnić się, że GnuPG faktycznie obsługuje interfejs gpg-agent. GnuPG 2 i nowsze generalnie tak, ale gałąź GnuPG 1 nie. Domyślnie git używa gpgpliku binarnego, który (w momencie pisania tej odpowiedzi) wciąż jest GnuPG 1, podczas gdy GnuPG 2 jest instalowany jak gpg2w większości systemów.

Na koniec masz dwie możliwości:

  • skonfiguruj git do użyciagpg2 , zmieniając konfigurację git:

    git config --global gpg.program gpg2
    
  • skonfiguruj gpg(GnuPG 1) do użycia gpg-agentprzez dodanie use-agentdogpg.conf
Jens Erat
źródło
0

Oprócz powyższej odpowiedzi możesz również zmienić domyślną wartość gpgw swoim systemie na gpg2zamiast gpg1.

Jeśli git config --global gpg.program gpg2działa dla ciebie, ale nie chcesz pozostawiać tego w konfiguracji git (w moim przypadku, ponieważ używam tej samej konfiguracji w systemie macOS), możesz po prostu zamienić domyślną gpg.

Postępowałem zgodnie z przewodnikiem tutaj , który był po prostu:

$ sudo mv /usr/bin/gpg /usr/bin/gpg1
$ sudo update-alternatives --verbose --install /usr/bin/gpg gnupg /usr/bin/gpg2 50

To sprawia, gpg1że stary gpgplik binarny i dowiązania symboliczne /usr/bin/gpg -> /usr/bin/gpg2(o nazwie gnupg i priorytecie 50).

Zmiana wartości domyślnej gpgmoże teoretycznie uszkodzić niektóre pakiety w twoim systemie, ale Debian Stretch (obecna stabilna wersja Debiana) ustawia się gpg2jako domyślnygpg w podobny sposób, więc nie powinieneś mieć zbyt wielu problemów.

klin
źródło