Kontext

Kontext

Kontext

Ich möchte GPG-Authentifizierungsunterschlüssel anstelle von SSH-Schlüsseln verwenden.

Ich möchte es auch verwenden, gpg-agentum die Kennwortzwischenspeicherung für diese Schlüssel zu verwalten.

Ich arbeite in einer Headless-Umgebung und würde sie daher gerne pinentry-cursesfür mein Programm zur Kennworteingabe verwenden, aber ich bin mit allem zufrieden, was in einer Headless-Umgebung funktioniert.

Mein Entwicklungsworkflow besteht darin, dass ich in mehreren Sitzungen und Bereichen arbeite und von jedem davon aus tmuxdarauf zugreifen können muss .git push

Problem

Das Problem tritt auf, wenn ich dies versuche. Anstatt pinentryin meinem aktuellen Fenster aufzutauchen, taucht es in einem zufälligen anderen Fenster auf (oder manchmal vielleicht in gar keinem Fenster, aber es ist möglich, dass es einfach zu viele sind, um sie zu durchsuchen). Um dies zu beheben, muss ich dieses Fenster schließen und pinentry-cursesselbst dann schlägt es manchmal immer noch fehl.

Was ich versucht habe

Von mir ausprobierte Konfigurationen

Meine aktuelle Konfiguration ist wie folgt, obwohl ich in den letzten Wochen eine Menge ausprobiert habe, um sie zum Laufen zu bringen.

# ~/.zshrc

unset SSH_AGENT_PID
if [ "${gnupg_SSH_AUTH_SOCK_by:-0}" -ne $$ ]; then
  export SSH_AUTH_SOCK="$(gpgconf --list-dirs agent-ssh-socket)"
fi

if [[ $SSH_AUTH_SOCK == /tmp/* ]]; then
    ln -sf $SSH_AUTH_SOCK $HOME/.ssh-agent-sock
    export SSH_AUTH_SOCK=$HOME/.ssh-agent-sock
fi

export GPG_TTY=$(tty)
gpg-connect-agent updatestartuptty /bye >/dev/null
# ~/.gnupg/gpg-agent.conf

pinentry-program /usr/sbin/pinentry-curses
default-cache-ttl 600
max-cache-ttl 7200
enable-ssh-support
# ~/.gnupg/gpg.conf

use-agent
# ~/.gnupg/sshcontrol

MYFINGERPRINTS
# ~/.ssh/config

Host localhost
ForwardAgent yes
AddKeysToAgent ask

Links, die ich ausprobiert habe

Update: Funktionierende Konfiguration (nochmals vielen Dank an @SystematicFrank)

# ~/.zshrc

export GPG_TTY=$(tty)
# ~/.gnupg/gpg-agent.conf

pinentry-program /usr/bin/pinentry-curses
default-cache-ttl 600
max-cache-ttl 7200
enable-ssh-support
# ~/.gnupg/gpg.conf

use-agent
# ~/.gnupg/sshcontrol

MYFINGERPRINTS
# ~/.ssh/config

Host localhost
ForwardAgent yes
AddKeysToAgent ask
Match host * exec "gpg-connect-agent UPDATESTARTUPTTY /bye"

Antwort1

Das Problem besteht darin, dass Sie jedes Mal aufrufen, wenn gpg-connect-agent updatestartupttySie ein Terminal öffnen, sodass Pinentry selbst auf die neueste Shell verweist.

Was Sie eigentlich wollen, ist nicht das neueste Shell-Terminal, sondern das, von dem aus Sie sich verbinden (beim Aufruf von SSH).

Der einfachste Weg hierfür ist, .ssh/config anzuweisen, den Update-Befehl von dem TTY aus auszuführen, mit dem Sie sich verbinden. Dies ist die magische Zeile, die Ihnen fehlt:

Match host * exec "gpg-connect-agent UPDATESTARTUPTTY /bye"

verwandte Informationen