Können Emacs GPG-Agent überhaupt in einem Terminal verwenden?

11

Ich verstehe, dass es Probleme gibt, pinentry-cursesmit Emacs zu arbeiten (siehe einige Kommentare auf http://emacswiki.org/emacs/EasyPG ), weshalb die Verwendung von Emacs in einem Terminal aus diesem Grund nicht mit gpg-agent kompatibel ist .

In diesem Fall kann ich kein grafisches Pinentry-Tool verwenden, da dies über eine SSH-Verbindung zu einem Remote-Computer erfolgt.

Ist es jedoch möglich, dem gpg-Agenten die Passphrase vorher einzugeben und diese dann von Emacs verwenden zu lassen, aber nicht zur Eingabe einer Passphrase aufzufordern, wenn der Agent diese Informationen noch nicht hat?

Mit welchen Einstellungen könnte dies funktionieren notmuch.elund EasyPG?

Oder gibt es alternative Methoden zum Zwischenspeichern der Passphrase, die den gleichen Effekt erzielen würden, aber möglicherweise Sicherheitsprobleme aufweisen (weshalb gpg-agent überhaupt existiert)?

David Gardner
quelle
1
sollte dies auf emacs.stackexchange.com verschoben werden ?
Unhammer
2
Sicher - Es ist hier, weil ich nicht glaube, dass emacs.stackexchange.com existiert hat, als ich die Frage gestellt habe :)
David Gardner

Antworten:

4

DIESE! -> https://github.com/ecraven/pinentry-emacs

Du musst ein bisschen schrauben, aber dieses Ding zu benutzen hat bei mir funktioniert. Legen Sie das Skript dort in einem Verzeichnis in Ihrem ab PATHund fügen Sie den folgenden Eintrag hinzu ~/.gnupg/gpg-agent.conf:

pinentry-program <path-to-pinentry-emacs>/pinentry-emacs

Laden Sie dann den Agenten neu:

$ echo RELOADAGENT | gpg-connect-agent

Funktioniert wie ein Traum für mich :)

djhaskin987
quelle
Was passiert, wenn Sie sich außerhalb von Emacs befinden und eine PIN eingeben müssen? (Gibt es eine Möglichkeit, Pinentry-Flüche zu verwenden, wenn Sie von außen nach Emacs gefragt werden, und Pinentry-Emacs, wenn Sie von innen nach Emacs gefragt werden?)
Unhammer
gpg soll in der Lage sein, auf andere Pinentries zurückzugreifen, wenn es nicht auf Emacs Pinentry zugreifen kann, aber Emacs laufen auf einem Daemon, daher fällt es für mich nie zurück :( Wenn ich dies verwende, darf ich entweder keine Emacs ausführen als Daemon (etwas, das ich nicht ausprobiert habe) oder ich muss ein Emacs-Fenster geöffnet haben, damit ich mein Passwort eingeben kann
djhaskin987
3

Eine Alternative, wenn Sie ein relativ neues pinentry / gpg2 haben (getestet mit 0.9.7 bzw. 2.1.11 unter Arch Linux), ist die Verwendung von http://elpa.gnu.org/packages/pinentry.html .

Installieren pinentryvon M-x list-packages, dann setzen

allow-emacs-pinentry

in deine .gnupg/gpg-agent.confund setzen

(setenv "INSIDE_EMACS" (format "%s,comint" emacs-version))
(pinentry-start)

in deinem .emacs.d/init.el. Ich musste das Setenv dort einfügen, da INSIDE_EMACS zwar beim Ausführen M-x shellfestgelegt ist, beim einfachen Öffnen einer .gpgDatei jedoch nicht.

Jetzt verwendet gpg-agent die reguläre Curses-Version vom Terminal und von Emacs aus read-passwd(wodurch die Zeichen vor der Eingabeaufforderung und vor versteckt werden view-lossage).


BEARBEITEN: Es scheint, dass das Debian-Paket einen Patch zum Entfernen der Emacs-Unterstützung enthält. Daher funktioniert diese Lösung derzeit nur für andere Distributionen / Personen, die bereit sind, Pinentry selbst zu kompilieren.

Unhammer
quelle
In der Hilfe zum Pinentry-Paket heißt es: "HINWEIS: Ab Juni 2015 sind für diese Funktion neuere Versionen von GnuPG (2.1.5+) und Pinentry (noch nicht veröffentlicht, möglicherweise 0.9.5+) erforderlich. Weitere Informationen finden Sie in der Diskussion zu gnupg-. Mailingliste entwickeln: < lists.gnupg.org/pipermail/gnupg-devel/2015-May/029875.html> . " Ich habe es also noch nicht geschafft, dies zum Laufen zu bringen, werde es aber bald erneut versuchen!
David Gardner
Ja, Sie brauchen Ubuntu Xenial oder Debian Stretch, wie es scheint (oder Arch natürlich)
Unhammer
Bearbeitete Antwort; Es scheint, dass Debians Pinentry-Paket die Emacs-Unterstützung entfernt hat (die jedoch in Arch und Fedora enthalten ist). Siehe bugs.gnupg.org/gnupg/msg6623 (und beachten Sie, dass github.com/ecraven/pinentry-emacs verwirrenderweise ein völlig anderes Programm ist).
Unhammer
1
Unter Verwendung von GuixSD 0.11.0 mit gpg 2.1.13 und emacs 25.1.1 ist das pinentry emacs-Paket "eingebaut". Außerdem muss die Variable INSIDE_EMACS nicht mehr festgelegt werden. Sie funktioniert nur, nachdem Sie die Option "allow-emacs-pinentry" festgelegt haben, und pkill gpg-agentstartet sie beim nächsten Mal mit der neuen Einstellung neu!
user30747