무엇이 작동하고 있나요?
내 gpg-agent pinentry는 X에서 잘 작동합니다. 나는 뛸 수 있습니다
echo "test" | gpg2 -ase --default-recipient-self | gpg2
내 비밀번호를 캐싱하고 나중에 실행하여 killall gpg-agent -1
비밀번호를 새로 고치세요.
기본적으로 pinentry-gtk를 열고(외관상) 비밀번호를 묻는 메시지를 표시합니다.
작동하지 않는 것
그러나 X 서버 없이 동일한 명령을 실행하려고 하면 gpg2가 중단되는 것 같습니다(프롬프트나 아무것도 표시되지 않음). 이를 종료하면 pinentry
계속 존재하지만 아무 소용이 없는 프로세스가 있음을 알 수 있습니다.
내가 무슨 일이 일어나길 기대하는지
gpg2
나는 X 서버 없이 실행하면 다음과 같은 pinentry-curses 프롬프트가 표시되기를 바랐습니다 pass
. 또한 표준 입력에서 비밀번호를 입력하라는 메시지를 표시한 이전 버전의 gpg가 기억나는 것 같은데 왜 그런 일이 발생하지 않는지 잘 모르겠습니다.
내가 시도한 것
다음 "수정 사항"을 시도했지만 그 중 어느 것도 위 명령이 올바르게 실행되지 않았습니다. 실제로 pinentry-curses를 강제로 적용하면 X 환경( pass
여전히 작동함)에서도 위 명령이 실패하게 됩니다.
pinentry-program /usr/bin/pinentry-curses
`gpg-agent.conf`에 설정다음과 같이 gpg-agent를 시작하십시오.
gpg-agent --daemon --keep-tty --use-standard-socket --pinentry-program=/usr/bin/pinentry-curses
환경 변수를 사용하십시오.
export PINENTRY_USER_DATA="USE_CURSES=1”
배경 정보
거의 비어 있는 .gpg-agent 구성 파일이 있는데 캐시 시간 초과만 있습니다.
로그인할 때 gpg-agent를 직접 호출합니다 eval $(gpg-agent --daemon)
. 예를 들어 X로 부팅하지 않으므로 getty를 사용하여 로그인합니다.
답변1
아... 답은 첫 화면의 값에 있습니다 man gpg-agent
. ~/.bashrc에 다음 줄을 추가해야 합니다.
GPG_TTY=$(tty)
export GPG_TTY
GPG_TTY의 잘못된 값은 pinentry-curses가 실행되는 이유를 설명하지만 필요한 위치는 설명하지 않습니다.
노트:콘솔 로그인과 X 서버 시작 사이에 출력이 변경 되므로 tty
모든 ~/.bashrc에서 실행해야 합니다(내보낸 환경 변수의 대부분은 로그인 시에만 실행되도록 구성되어 있습니다).
답변2
X와 tty 사이를 자주 전환하는 경우 다음을 실행하고 싶을 수 있습니다.
gpg-connect-agent updatestartuptty /bye > /dev/null
현재 환경으로 설정