Контекст

Контекст

Контекст

Я хотел бы использовать подключи аутентификации GPG вместо ключей SSH.

Я также хотел бы использовать gpg-agentкэширование паролей для этих ключей.

Я работаю в среде headless, поэтому хотел бы использовать pinentry-cursesдля своей программы ввода паролей, но меня устроит все, что работает в среде headless.

Мой рабочий процесс разработки таков, что я работаю в нескольких tmuxсеансах и панелях и мне нужно иметь возможность работать git pushиз любого из них.

Проблема

Проблема возникает, когда я пытаюсь это сделать. Вместо того, чтобы pinentryпоявиться в моей текущей панели, он появляется в случайной другой панели (или иногда, возможно, вообще не в какой-либо панели, но возможно, их просто слишком много, чтобы искать). Чтобы решить эту проблему, мне нужно убить эту панель, и pinentry-cursesдаже тогда он все еще иногда терпит неудачу.

Что я пробовал

Конфигурации, которые я пробовал

My current configuration is as follows, though I've tried a plethora over the past couple weeks to attempt to get this working.

# ~/.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

Ссылки, которые я пробовал

Обновление: рабочая конфигурация (еще раз спасибо @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"

решение1

Проблема в том, что вы вызываете gpg-connect-agent updatestartupttyкаждый раз, когда открываете терминал, поэтому pinentry указывает на последнюю версию оболочки.

На самом деле вам нужна не последняя версия терминала shell, а та, с которой вы подключаетесь (при вызове ssh)

Для этого самый простой способ — сказать .ssh/config выполнить команду обновления с tty, к которому вы подключаетесь. Это магическая строка, которую вам не хватает:

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

Связанный контент