올바른 tty에서 pinentry-curses를 시작하는 방법?


13

gpg-agentPGP e 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

대화 형 셸을 실행할 때마다 제공됩니다. 이 설정에서는 모든 것이 잘 작동하지만 문제가 있습니다. 내가 말해 봅시다 :

  1. 터미널을 열고 (백그라운드에서 에이전트 시작) 작업 시작
  2. 잠시 후 두 번째 터미널을 엽니 다
  3. 두 번째 터미널에 암호를 입력해야하는 작업을 수행

이 시점에서 gpg-agent시작됩니다 pinentry-curses암호 메시지를 표시하지만 프로그램이나 정지 pinentry을 재개 할 수있는 방법과 실행 (보통 텍스트 편집기) 된 어떤 혼합 출력 결과 제 1 단자에서이 작업을 수행 할 것이다 (이것은 100 %의 CPU를 사용하여 시작 그리고 나는 그것을 죽여야한다).

나는 여기서 뭔가 잘못하고 있어야합니다. 누구든지 이것을 경험 했습니까?

최신 정보:

나는 메시지가 SSH 키 같은 외모의 잠금을 해제하기 위해이는 일이 알아 낸 올바른 (즉, 전류) 청각 장애 중에도 PGP 키에 대한 프롬프트가 항상 열려.


로그인 쉘에서 에이전트 시작을 시도 했으므로 실행중인 에이전트 만 있습니까?
jasonwryan

@jasonwryan 방금 시도했습니다 : 리눅스 가상 터미널 (agetty)과 동일합니다. 그런데 터미널에 관한 질문에서 나는 터미널 에뮬레이터 창을 의미했습니다.
Rnhmjoj

1
그것은 export GPG_TTY="$(tty)"나를 위해 고정되었습니다
naisanza

답변:


11

GPG 에이전트 매뉴얼 페이지 옵션에서 설명 --enable-ssh-supportssh를 에이전트 프로토콜은 디폴트 그래서 년에 시작되었다 원래 터미널을 사용하여 에이전트에 청각 장애의 이름을 제공 할 수 없다는 것을.을 필요로 ssh 명령을 실행하기 전에 새 터미널에서 암호를 입력해야합니다

gpg-connect-agent updatestartuptty /bye

새 터미널에서 사용할 tty 또는 디스플레이의 에이전트보기를 업데이트하십시오.


1
이 답변을 통해 이러한 실현을 완전히 해결하는 데 도움이되었습니다. 담당자 gpg2는 명령 줄 중심의 워크 플로 / 라이프 스타일에 대한 개념이 없습니다. 어떻게 든 일반적인 컴퓨터 사용자 경험 이라는 기본 개념 이 GUI 창의 경계 안에서 시작하고 끝나는 사람들은 이전에 명령 줄에서 편안하게 사용할 수 있었던 도구에 영향을 미치는 결정을 내려야했습니다.
mtraceur

2
@mtraceur 실제로, 그것은 잘못 ssh 에이전트입니다 : 실제로 gpg2는 PGP 키를 잠금 해제 할 때 오른쪽 tty에 프롬프트를 표시합니다. 아마도 다른 tty 로의 전환을 생각하지 않은 것은 ssh-agent를 담당하는 사람들입니다.
Rnhmjoj

2
@Rnhmjoj SSH 사용자가 대부분의 Unix / Linux 히스토리에 대한 명령 행 도구가 필요없는 TTY 전환 유스 케이스를 지원 했습니까? 명령으로 처리 된 워크 플로우의 어느 부분과 에이전트가 처리 한 부분에 대한 설계 사고 프로세스 및 의사 결정 방법을 알고 있습니까? 당신이 있다면, 아마도 내가 누락 된 것을 볼 수 있도록 도울 수 있습니다 . 아키텍처가 고려되지 않고 결정되지 않은 한 에이전트가 TTY를 "전환" 해야하는 방법에 대한 명확한 경로를 볼 수 없기 때문에 일반적인 명령 줄 사용 및 워크 플로
mtraceur

1
@ArneBabenhauserheide 차이점은 gpg잘못된 터미널에서 암호를 요구할 수 없지만 gpg2쉽게 할 수 있다는 것입니다. gpg명령은 항상 단말기에 암호를 요청할 것 에서 명령을 실행 실제로에서 수행 된 암호를 생성하기 때문에 프로세스 트리. 그러나 gpg2암호문을 입력하라는 별도의 장기 실행 에이전트 프로세스를 요청해야하며 에이전트가 원래 다른 터미널에서 시작되었을 수 있으므로이를 보장 할 수 없도록 코딩되었습니다. gpg2에이전트는이 문제를 해결하기 위해 코딩 할 수 있었지만 코딩되지 않았습니다.
mtraceur

1
@ArneBabenhauserheide SSH 에이전트와 gpg2의 차이점에 대해 질문하지 않는 한? 그렇다면 SSH의 다른 툴링이 에이전트에게 백그라운드에서 터미널을 전환하도록 적극적으로 지시하지 않아도된다는 점은 다릅니다 (내가 아는 한-나 에게도 동일한 비판 있습니다) ). gpg2리눅스 / 유닉스의 작동 방식의 CLI 관련 측면을 grok 수 없으며, 임의의 조합으로 구성 인터페이스 및 툴링 좋은 무엇이 좋은 감각이없는 사람들에 의해 구현하면 디자인에만 의미가 있습니다.
mtraceur

5

openssh에 대한 업스트림 버그 에 따라 올바른 방법은 다음을 추가하는 것입니다 ~/.ssh/config.

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

이것은 지금까지 완벽하게 작동했습니다.


1
참고 GPG_TTY로 설정해야 $(tty)이 작업을 할 수 있습니다.
피터
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.