Ich verwende gpg-agent
zum Verwalten beider PGP- und SSH-Identitäten. Der Agent wird mit einem solchen Skript gestartet
gpg_agent_env="$XDG_CACHE_HOME/gpg-agent.env"
export GPG_TTY="$(tty)"
if ! ps -U "$USER" -o ucomm | grep -q gpg-agent; then
eval "$({gpg-agent --daemon | tee $gpg_agent_env} 2> /dev/null)"
else
source "$gpg_agent_env" 2> /dev/null
fi
Das wird immer dann bezogen, wenn ich eine interaktive Shell ausführe. Mit diesem Setup funktioniert alles einwandfrei, aber es gibt ein Problem. Sagen wir ich:
- Öffnen Sie ein Terminal (starten Sie den Agenten im Hintergrund) und beginnen Sie zu arbeiten
- Nach einer Weile öffnen Sie ein zweites Terminal
- Führen Sie eine Aktion aus, bei der im zweiten Terminal eine Passphrase eingegeben werden muss
An diesem Punkt gpg-agent
wird pinentry-curses
eine Passphrase abgefragt, dies wird jedoch im ersten Terminal ausgeführt, was dazu führt, dass die Ausgabe mit dem, was gerade ausgeführt wurde (normalerweise ein Texteditor), gemischt wird, ohne dass das Programm fortgesetzt oder die Pinentry gestoppt werden kann (es beginnt mit der Verwendung von 100% CPU) und ich muss es töten).
Ich muss hier etwas falsch machen. Hat das jemand erlebt?
Aktualisieren:
Ich fand heraus , geschieht dies nur für eine Aufforderung einen SSH - Schlüssel, die aussieht wie zu entsperren diese , während Ansagen für PGP - Schlüssel immer offen auf der richtigen (dh Strom) tty.
export GPG_TTY="$(tty)"
, was es für michAntworten:
In der Manpage gpg-agent wird unter der Option erläutert,
--enable-ssh-support
dass das ssh-Agentenprotokoll dem Agenten nicht den Namen des tty bereitstellen kann. Daher wird standardmäßig das ursprüngliche Terminal verwendet, in dem es gestartet wurde. Bevor der Befehl ssh ausgeführt wird, für den a erforderlich ist Passphrase in einem neuen Terminal, das Sie eingeben müssenim neuen Terminal, um die Ansicht des Agenten zu aktualisieren, welche tty oder Anzeige verwendet werden soll.
quelle
gpg2
haben keine Vorstellung davon, wie es ist, einen befehlszeilenorientierten Workflow / Lebensstil zu haben. Irgendwie mussten Personen, deren grundlegendes Konzept einer typischen Computerbenutzererfahrung innerhalb der Grenzen von GUI-Fenstern beginnt und endet, Entscheidungen treffen, die sich auf ein Tool auswirken, das zuvor bequem über die Befehlszeile verwendet werden konnte.gpg
man niemals auf dem falschen Terminal nach der Passphrase fragen kann, wohingegen diesgpg2
leicht möglich ist. Dergpg
Befehl fragt immer nach der Passphrase auf dem Terminal, von dem aus Sie den Befehl ausgeführt haben, da das eigentliche Erstellen der Passphrase über diesen Prozessbaum erfolgt ist. Istgpg2
jedoch so codiert, dass dies nicht sichergestellt werden kann, da ein separater, lang laufender Agentenprozess aufgefordert werden muss, nach der Passphrase zu fragen, und dieser Agent möglicherweise ursprünglich auf einem anderen Terminal gestartet wurde.gpg2
und der Agent konnte, wurde aber nicht codiert, um das zu umgehen.gpg2
Design ist nur dann sinnvoll, wenn es von Personen implementiert wird, die die CLI-relevanten Aspekte der Funktionsweise von Linux / Unix nicht kennen und nicht genau wissen, was Schnittstellen und Tools für das Komponieren in beliebigen Kombinationen gut macht.Gemäß dem Upstream - Bug gegen OpenSSH, die richtige ist Weg , um dieses Hinzufügen der folgenden auf Ihre
~/.ssh/config
:Das hat bei mir bisher perfekt funktioniert.
quelle
GPG_TTY
dies eingestellt sein muss$(tty)
, damit dies funktioniert.