2016-04-08 5 views
11

GitHub recently announced verified commits, also habe ich diese Gelegenheit genutzt, um GPG zu implementieren und mit Schlüsseln zu beginnen. Wenn ich zu begehen beginnen soll, erhalte ich die folgenden:Warum muss ich gpg-agent beenden, um meine Commits zu signieren?

$ git commit 

You need a passphrase to unlock the secret key for 
user: "John Doe <[email protected]>" 
4096-bit RSA key, ID ABCD1234, created 2016-04-08 

gpg: problem with the agent - disabling agent use 
error: gpg failed to sign the data 
fatal: failed to write commit object 

Ich ging online und nach einer Lösung gesucht, und eine Website (für einen Mail-Provider) vorgeschlagen killall gpg-agent, und es funktionierte. Jetzt kann ich Commits durch Eingabe meiner Passphrase unterschreiben.

Ist gpg-agent notwendig? Es scheint mit GPG zu kommen, als ich es installiert habe, aber wenn ich es töten muss, um meine Commits zu signieren, scheint es, dass ich etwas habe, das ich nicht verstehe. Wie kann ich das beheben, so dass ich gpg-agent ausführen kann und meine Commits signieren kann?

Antwort

16

Ich habe gerade herausgefunden, wie man heute auf meinem Mac gpg-agent verwenden kann. Ich wurde blockiert, nachdem ich den gleichen Fehler wie Sie traf:

gpg: problem with the agent - disabling agent use 

tldr; Wie ich es reparierte

Für meine Einrichtung konnte ich dies beheben, indem ich pinentry-mac installiere und zeige, um es zu verwenden, so eine GUI-Eingabeaufforderung wie erforderlich aufspringend.

1. install pinentry-mac 
% brew install pinentry-mac 
2. update gpg-agent conf 
# manually change ~/.gnupg/gpg-agent.conf's pinentry-program to /usr/local/bin/pinentry-mac 
3. update shell's view of PATH contents 
% hash -r 
4. restart gpg-agent 
# however you normally do it (see below for how I run it manually) 

Details zum Debuggen

ich gedebuggt dies durch die gpg-agent manuell neu starten. Ich zum ersten Mal die configs in ~/.gnupg/gpg-agent.conf kommentiert, dann lief ich diesen Befehl, um den GPG-Agenten mit --verbose neu zu starten:

% killall gpg-agent && \ 
    eval $(gpg-agent --pinentry-program /usr/local/bin/pinentry --default-cache-ttl 60 --daemon --verbose) 

Dann habe ich einen Test Befehl lief und sah den Fehler, den wir oben beide aufgeführt haben, sowie ein neues Geschäft:

# update the MY_GPG_KEY_ID as appropriate 
% echo hi | gpg -e -r $(MY_GPG_KEY_ID) | gpg -d --use-agent 
... 
gpg-agent[60604]: command get_passphrase failed: Device not configured 
gpg: problem with the agent - disabling agent use 
... 

ich schließlich realisiert (nach dem Lesen this article und this GPG page), dass GPG_TTY wurde nicht durch die Schritte festgelegt wurde ich folgende für gpg-agent starten. Also einmal stellte ich diese Variable alles „gearbeitet“:

% killall gpg-agent && \ 
    eval $(gpg-agent --pinentry-program /usr/local/bin/pinentry --default-cache-ttl 60 --daemon --verbose) 
% export GPG_TTY=`tty` 
# Now the below command succeeds 
% echo hi | gpg -e -r $(MY_GPG_KEY_ID) | gpg -d --use-agent 

In der Mitte dieser Übung war ich eine Menge verschiedener Optionen versuchen, und entdecken, dass der pinentry-mac GUI Souffleur „nur gearbeitet“.

Vermeidung GUI Passwort Souffleur

Wenn Sie tauchen nicht ein GUI Souffleur wollen, dann denke ich, es würde ausreichen, um sicherzustellen, dass das folgende env Variablen in jedem Endgerät eingestellt werden:

  • GPG_TTY
    • z. B. können Sie diese Zeile in Ihre einfügen.bashrc:
    • export GPG_TTY=$(tty)
  • GPG_AGENT_INFO
+0

Ich vergaß zu erwähnen, dass ich Ubuntu verwenden. : sweat_smile: Lass mich sehen, ob ich deine Forschung auf mein Problem anwenden kann. –

+1

Die Lösung für mein Problem war anscheinend einfacher. Laut [diesem Handbuch] (https://www.gnupg.org/documentation/manuals/gnupg/Invoking-GPG_002dAGENT.html) muss ich GPG angeben, welche TTY ich verwende, sobald das erledigt ist, hat alles super geklappt . Wenn Sie Ihre Antwort ändern, um dies zu reflektieren, kann ich Ihre Antwort akzeptieren. –

+0

@ cj-duncan Ich legte die Details über die Einstellung 'GPT_TTY' in Ihrem' .bashrc' (Ich habe keine Ahnung, wie Sie "@" mit dem Leerzeichen in Ihrem Benutzernamen :)) –