올바른 tty에서 pinentry-curses를 시작하려면 어떻게 해야 합니까?

올바른 tty에서 pinentry-curses를 시작하려면 어떻게 해야 합니까?

PGP를 사용하여 gpg-agentSSH ID를 관리합니다. 에이전트는 다음과 같은 스크립트로 시작됩니다.

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

대화형 쉘을 실행할 때마다 그것을 얻습니다. 이 설정에서는 모든 것이 잘 작동하지만 문제가 있습니다. 내가:

  1. 터미널을 열고(백그라운드에서 에이전트 시작) 작업 시작
  2. 잠시 후 두 번째 터미널을 엽니다.
  3. 두 번째 터미널에서 비밀번호가 필요한 작업 수행

이 시점에서 비밀번호를 묻는 메시지가 표시 gpg-agent되기 시작 pinentry-curses하지만 첫 번째 터미널에서 비밀번호를 묻는 메시지가 표시됩니다. 이로 인해 출력이 실행 중인 모든 항목(일반적으로 텍스트 편집기)과 혼합되어 프로그램을 다시 시작하거나 중지할 수 없게 됩니다. pinentry (100% CPU를 사용하여 시작됩니다.) 종료해야 합니다.

내가 여기서 뭔가 잘못하고 있는 게 틀림없어. 누구든지 이것을 경험 했습니까?

고쳐 쓰다:

SSH 키를 잠금 해제하라는 메시지가 표시될 때만 이런 일이 발생한다는 것을 발견했습니다.이것, PGP 키에 대한 프롬프트는 항상 올바른(즉, 현재) tty에서 열립니다.

답변1

이것gpg-agent 매뉴얼 페이지--enable-ssh-support이 옵션에서는 SSH 에이전트 프로토콜이 tty 이름을 에이전트에 제공할 수 없으므로 기본값이 시작된 원래 터미널로 지정된다는 설명이 있습니다 . 새 터미널에서 비밀번호가 필요한 SSH 명령을 실행하기 전에 다음을 입력해야 합니다.

gpg-connect-agent updatestartuptty /bye

새 터미널에서 사용할 tty 또는 모니터에 대한 에이전트 보기를 업데이트합니다.

답변2

~에 따르면업스트림 오류openssh에 대항하여,적절한이렇게 하려면 다음을 추가하세요 ~/.ssh/config.

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

이것은 지금까지 나에게 효과적입니다.

관련 정보