PGP를 사용하여 gpg-agent
SSH 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
대화형 쉘을 실행할 때마다 그것을 얻습니다. 이 설정에서는 모든 것이 잘 작동하지만 문제가 있습니다. 내가:
- 터미널을 열고(백그라운드에서 에이전트 시작) 작업 시작
- 잠시 후 두 번째 터미널을 엽니다.
- 두 번째 터미널에서 비밀번호가 필요한 작업 수행
이 시점에서 비밀번호를 묻는 메시지가 표시 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"
이것은 지금까지 나에게 효과적입니다.