Contexto

Contexto

Contexto

Gostaria de usar subchaves de autenticação GPG em vez de chaves SSH.

Eu também gostaria de usar gpg-agentpara gerenciar o cache de senhas para essas chaves.

Estou executando em um ambiente sem cabeça, então gostaria de usar pinentry-cursesmeu programa de entrada de senha, mas estou bem com qualquer coisa que funcione em um ambiente sem cabeça.

Meu fluxo de trabalho de desenvolvimento é tal que estou trabalhando em várias tmuxsessões e painéis e preciso poder fazer isso git pushem qualquer um deles.

Problema

O problema ocorre quando tento fazer isso. Em vez de pinentryaparecer no meu painel atual, ele aparece em outro painel aleatório (ou às vezes talvez em nenhum painel, mas é possível que haja muitos para pesquisar). Para resolver isso, preciso encerrar esse painel e pinentry-curses, mesmo assim, às vezes ele ainda falha.

O que eu tentei

Configurações que tentei

Minha configuração atual é a seguinte, embora eu tenha tentado várias vezes nas últimas semanas para tentar fazer isso funcionar.

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

Atualização: configuração de trabalho (obrigado novamente a @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"

Responder1

O problema é que você liga gpg-connect-agent updatestartupttytoda vez que abre um terminal, então o pinentry aponta para o shell mais recente.

O que você realmente deseja não é o terminal shell mais recente, mas aquele a partir do qual você está se conectando (ao chamar ssh)

Para isso, a maneira mais fácil é dizer ao .ssh/config para executar o comando de atualização do tty que você está conectando. Esta é a linha mágica que está faltando:

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

informação relacionada