GPG hängt, wenn auf private Schlüssel zugegriffen wird

14

Ich mag es, meine Git-Commits mit meinem PGP-Schlüssel zu signieren, daher war ich ziemlich alarmiert, als ich zu ging, git commit -Saber anstatt nach meiner PGP-Schlüssel-Passphrase zu fragen, fing Git gerade an zu hängen. Ich habe seit einigen Monaten keine Änderungen an meinem GPG-Setup vorgenommen und seitdem viele Commits ohne Probleme durchgeführt. Wenn ich versuche, meine privaten Schlüssel mit anzuzeigen gpg -K, bleibt gpg hängen. Wenn ich gpg -kjedoch meine öffentlichen Schlüssel anzeigen möchte, wird die Liste wie gewohnt zurückgegeben. Hoffentlich hat jemand eine Vorstellung davon, was dieses Problem verursacht und wie es behoben werden kann.

John Leuenhagen
quelle
machst du das über ssh? Wenn ja, haben Sie ein gpg-agentähnliches Setup in der .bashrc (usw.) des Remote-Systems und sind so konfiguriert, dass es auf dem X-Display der Remote oder ähnlichem angezeigt wird? Ich habe in der Vergangenheit ähnliche Probleme hat (zB ssh-ing von einem Terminal auf meinem mythtv Box zu meinem Desktop - Rechner zu laufen etwas gpg erfordern. auch ähnliche Probleme mit hatte ssh-agent), und i Brute-Force „fest“ mit export GPG_TTY=$(tty)in der .bashrc, um sicherzustellen, dass die Eingabeaufforderung immer auf dem aktuellen tty ist. Ich kann GUI Passwd-Eingabeaufforderungen sowieso nicht ausstehen.
Cas
1
Nein, ich mache es nicht über SSH. Was seltsam ist, dass ich festgestellt habe, dass gpg wieder funktioniert, wenn ich gpg-agent töte. Ich versuche herauszufinden warum und eine langfristige Lösung zu finden.
John Leuenhagen
Ich habe gerade in der gpg-agentManpage bemerkt, dass das Festlegen von GPG_TTY wie oben nicht etwas ist, das ich gehackt habe, um zu arbeiten, es ist erforderlich. Auf der Manpage steht, dass Sie es immer wie ich in Ihrem .bashrc einstellen sollten, und es heißt auch It is important that this environment variable always reflects the output of the tty command.- das muss der Ort gewesen sein, von dem ich es bekommen habe. Eine andere Sache, auf die Sie achten müssen, ist das von gpg-agent verwendete Pinentry-Programm. Ich habe meine eingestellt (in ~/.gnupg/gpg-agent.conf) auf/usr/bin/pinentry-curses
cas

Antworten:

19

Ich bin genau auf dieses Problem gestoßen (OSX Sierra 10.12.6, gpg / GnuPG 2.2.5).

Befehle, die hängen würden:

gpg -K # --list-secret-keys
gpg -d # --decrypt
gpg --edit-key
gpgconf --kill gpg-agent

Meine Lösung war die gleiche wie die oben von John erwähnte (dh gpg-agent töten), da die meisten anderen Methoden zum How-Can-i-Restart-gpg-Agent ebenfalls hängen bleiben würden.

# Solution    
pkill -9 gpg-agent

Dann setze ich zum Signieren von Git-Commits das tty env wie oben von cas erwähnt und auch bei gpg-failed-to-sign-commit-object .

export GPG_TTY=$(tty)
CoffeeMonster
quelle
Müssen Sie gpg also jedes Mal neu beenden, wenn Sie neu starten? Das muss ich schon lange tun. Ich hoffe, wir werden einen Weg finden, dies endgültig zu beheben.
John Leuenhagen
Ich habe gerade angefangen, das Problem selbst zu haben. Das zu töten gpg-agentscheint der einzige Weg zu sein, um es wieder zum Laufen zu bringen.
Alexis Tyler