문맥

문맥

문맥

SSH 키 대신 GPG 인증 하위 키를 사용하고 싶습니다.

gpg-agent또한 이 키에 대한 비밀번호 캐싱을 관리하는 데에도 사용하고 싶습니다 .

헤드리스 환경에서 실행중이라 비밀번호 입력 프로그램으로 사용하고 싶은데 pinentry-curses헤드리스 환경에서 작동하는 것이라면 뭐든지 괜찮습니다.

내 개발 워크플로는 여러 세션과 창에서 작업하고 tmux있으며 그 중 어느 창에서든 작업할 수 있어야 합니다 git push.

문제

그렇게 하려고 하면 문제가 발생합니다. 현재 창에 팝업되는 대신 pinentry임의의 다른 창에 팝업이 표시됩니다(때로는 창이 전혀 없을 수도 있지만 검색할 창이 너무 많을 수도 있음). 이 문제를 해결하려면 해당 창을 종료해야 하는데, pinentry-curses그래도 여전히 실패하는 경우가 있습니다.

내가 시도한 것

내가 시도한 구성

내 현재 구성은 다음과 같습니다. 하지만 지난 몇 주 동안 이 작업을 수행하기 위해 수많은 노력을 기울였습니다.

# ~/.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가 최신 쉘을 가리킨다는 것입니다.

실제로 원하는 것은 최신 쉘 터미널이 아니라 연결하려는 터미널입니다(ssh 호출 시).

이를 위한 가장 쉬운 방법은 연결 중인 tty에서 업데이트 명령을 실행하도록 .ssh/config에 지시하는 것입니다. 이것은 당신이 놓친 마법의 라인입니다:

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

관련 정보