gpg/pinentry - 터미널 외부에서 비밀번호를 입력할 수 없습니다.

gpg/pinentry - 터미널 외부에서 비밀번호를 입력할 수 없습니다.

스크립트 내에서 gpg 파일의 암호를 해독하려고 합니다. 터미널에서 실행하면 gpg -d file.gpg저주 대화 상자에 비밀번호를 입력하라는 메시지가 표시됩니다. 그러나 해당 줄이 포함된 스크립트를 실행하면 "gpg: decryption failed: No key" 메시지가 표시되거나 대화형 터미널에서 실행되지 않으면 자동으로 실패합니다.

이상적으로는 터미널 창에서 Run 을 실행할 때입니다 pinentry-curses.

qt 또는 gtk를 사용하여 pinentry 프로그램을 실행하도록 설정하면 출처에 관계없이 매번 그래픽 창이 나타납니다. 이것이 제가 복제하고 싶은 동작입니다. 저는 이것이 qt나 gtk에 의존하는 것을 원하지 않습니다.

답변1

gpg2를 가정하면 보안 등에 대한 어떠한 주장도 하지 않는다는 점을 주의하면서 몇 가지 솔루션을 제공할 수 있습니다.

비밀번호 입력을 위한 터미널을 미리 생성해 주세요. 여기에 두 가지 명령을 입력하십시오.

tty
gpg-agent --pinentry-program /usr/bin/pinentry-curses --daemon sleep 999999

예를 들어, 이는 사용 중인 pty를 인쇄한 /dev/pts/10다음 gpg 에이전트를 실행합니다. gpg 에이전트는 sleep이 터미널에서 더 이상 읽기가 발생하지 않도록 "중단"됩니다.

다른 셸에서 무언가를 해독해야 하는 경우 먼저 다음을 사용하여 환경을 설정하세요.

export GPG_TTY=/dev/pts/10 
export GPG_AGENT_INFO=/run/user/1000/gnupg/S.gpg-agent:0:1

여기서 1000은 사용자 ID입니다. ( gpg-agent옵션으로 시작하여 이 소켓의 이름을 얻을 수 있습니다 -v. 더 깔끔한 방법으로 얻을 수 있다고 확신합니다.)

:0:1메시지 끝에 추가된 내용은 실제로 프록시의 pid 및 프로토콜 버전이어야 하지만 0이 허용되는 것 같습니다 . (소켓이 위의 경로 이름에 없으면 해당 소켓을 사용하지 않거나 gpg2구성 파일에 일부 옵션이 설정되어 있을 수 있습니다.)

지금 해야 한다--use-agent명령을 해독하는 옵션을 추가합니다 gpg. 그러면 pinentry 프로그램의curses 버전이 미리 생성된 터미널에 나타나야 하며, 이제 비밀번호를 입력할 수 있습니다.

관련 정보