로그인 하고 암호화하려고 실행 mutt
했을 tmux
때 gpg
gpg는 비밀번호를 입력해야 하는 빈 화면을 표시했습니다. gpg를 추적했는데 소켓을 기다리고 있는 것으로 나타났습니다 read()
(아마도 gpg-agent
. 여기서 무슨 일이 일어나고 있나요?).
답변1
짧은 답변
Bash를 사용한다면 Chris W.의 래퍼 스크립트가 최선의 선택입니다. zsh를 사용하고 있다면 ~/.zshenv
시작 스크립트를 활용하여 거기에서 설정할 수 GPG_TTY
있으며 래퍼는 필요하지 않습니다. Bash에는 유사한 시작 스크립트가 없기 때문에(참조배시 시작 파일), 거기에 래퍼를 사용해야합니다.
export GPG_TTY=${TTY}
배경지식: 대화형 및 비대화형 쉘
gpg-agent는 GPG_TTY
안전한 방식으로 비밀번호 프롬프트를 표시할 수 있도록 호출된 tty를 가리킬 것으로 예상합니다. 이것GnuPG 매뉴얼~/.bashrc
다음 (또는 이와 유사한 것) 을 넣는 것이 좋습니다 .
GPG_TTY=$(tty)
export GPG_TTY
이는 쉘에서 직접 mutt를 호출하면 작동합니다. GPG_TTY
설정되고 mutt는 이를 선택하여 필요한 경우 gpg에 전달합니다.
그러나 tmux의 명령이나 유사한 구성을 통해 mutt를 시작할 때 중요한 차이점이 있습니다 new-window
. 이전에는 mutt가 소위대화형 쉘- 즉, 쉘 프롬프트를 열고 거기에서 mutt를 시작합니다. tmux new-window
발사하다비대화형쉘은 mutt만 시작하면 되고 상호작용할 수 없기 때문입니다. 이 경우 목욕은 대화형 사용을 위해 쉘을 설정하기 위한 것이므로 읽지 않거나 전혀 읽지 않습니다 .bash_profile
..bashrc
zsh는 거의 동일한 작업을 수행합니다. 즉, .zshrc
대화형 셸은 읽고, 비대화형 셸은 건너뜁니다. 그러나 zsh에서는세 번째 시작 파일을 제공할 수 있습니다., .zshenv
, 읽은 내용은모든대화식이든 아니든 쉘입니다. 따라서 GPG_TTY
거기에서 설정하면 mutt가 어떤 방식으로 시작되든 항상 사용할 수 있습니다. $TTY
항상 현재 tty를 가리키는 쉘 내장 변수이므로 쉘이 시작될 때마다 프로세스를 생성하는 오버헤드를 피할 수 있습니다 tty
.
답변2
나는 mutt
달리기부터 시작했다 tmux neww mutt
. mutt
상속에 설정되는 환경입니다 tmux
. 여기에는 $GPG_TTY
실행 중인 새 창의 차이점이 포함됩니다 mutt
(또는 tmux
환경에 없는 경우 설정 해제). 새 창을 올바르게 설정하는 gpgtty
래퍼 를 작성했습니다 .$GPG_TTY
#!/bin/sh
GPG_TTY=$(tty) $*
그런 다음 시작합니다 mutt
: tmux neww gpgtty mutt
. gpg
그 후에는 잘 작동합니다. 참고로 pinentry-curses
비밀번호 gpg
입력은 여기까지입니다.