비밀번호를 묻는 메시지를 표시하기 위해 GPG에서 콘솔 모드 연결을 사용하도록하는 방법은 무엇입니까?


75

SSH 세션에서 GTK pinentry 대화 상자를 표시 할 수 없으므로 ssh 세션과 같은 콘솔 기반 환경에서 gpg를 사용할 수 없습니다.

나는 시도 unset DISPLAY했지만 도움이되지 않았다. GPG 명령 행 옵션에는 연결 장치를 콘솔 모드로 설정하기위한 스위치가 포함되어 있지 않습니다.

이전 GPG 버전은 SSH 세션에서 잘 작동하는 텍스트 기반 프롬프트를 제공했지만 업그레이드 후에는 실패했습니다.

거기입니다 --textmode명령 줄 스위치는하지만 분명히, 그것은 뭔가 다른 않습니다.

원격 세션에 일반 텍스트 핀 항목을 가져 오는 적절하고 깨끗한 방법은 무엇입니까?


DISPLAY="" gpg2 ...나를 도왔고, 나는 또한 pinentry-curses + pinentry-tty를 미리 설치했다. 그것들이 꼭 필요한지 확실하지 않다
ThorSummoner

답변:


89

펜 트리를 영구적으로 변경하려면 다음을 추가하십시오 ~/.gnupg/gpg-agent.conf.

pinentry-program /usr/bin/pinentry-tty

(pinentry-tty가없는 이전 버전에서는 'full-terminal'대화 상자 창에 pinentry-curses를 사용하십시오.)

GPG 에이전트에게 구성을 다시로드하도록 지시하십시오.

gpg-connect-agent reloadagent /bye

9
완전히 "정상적인"것은 아닙니다. 일반적으로, gpg-agent그 자체의 존재 유무를 감지하고 $DISPLAY적절한 협착을 선택해야합니다 ...
grawity

6
에이전트는 실행중인 xorg의 존재를 감지 할 수 있습니다. 그러나 DISPLAY정의 된 것이 반드시 SSH를 통해 연결된 경우와 같이 사용할 수 있거나 사용하려는 것은 아닙니다.
ccpizza

4
@lfxgroove : 문제는 suTTY의 소유권을 변경하지 않으므로 수동으로 chown수정 해야한다는 것입니다. 이 기사를 참조 하십시오 .
Rufflewind

2
@Starx : 하나 만듭니다.
grawity

3
또 다른 팁 : 사용 가능한 모든 옵션을 보려면을 입력하십시오 ls /usr/bin | grep pinentry. 내가보고 pinentry, pinentry-curses, pinentry-emacs, pinentry-gnome3, pinentry-gtk2, pinentry-qtpinentry-tty. 이렇게하면 문제가없는 경우 자신에게 더 적합한 것을 선택할 수 있습니다 $DISPLAY.
Jeffrey Lebowski 2012 년

8

암호가없는 시스템 계정과 ssh를 통한 사용자 계정에서 gpg2 (2.1.11)를 사용하여 개인 키를 생성 / 설치하려고 할 때 Ubuntu 16.04.3 에서이 문제가 발생했습니다. 아무것도 효과가 없었습니다.

gpg : 키 FE17AE6D / FE17AE6D : 에이전트로 전송 오류 : 권한 거부
gpg : 키 배열 작성 오류 : 권한 거부

그런 다음 저에게 도움 되는 이것을 발견 했습니다.

pico ~/.gnupg/gpg-agent.conf
# add: allow-loopback-pinentry
gpg-connect-agent reloadagent /bye
gpg2 --pinentry-mode loopback --import private.key

5

데비안 상자에서 :

sudo apt install pinentry-tty
sudo update-alternatives --config pinentry

(그리고 pinentry-tty로 설정)


4

우분투 18.04에서 gpg 2.2.4의 기본 설치로

/usr/bin/pinentry
/usr/bin/pinentry-gnome3
/usr/bin/pinentry-gtk-2
/usr/bin/pinentry-x11

텍스트 기반 PIN을 입력하기 위해 다음을 수행 할 수있었습니다.

export GPG_TTY=$(tty)
gpg-connect-agent updatestartuptty /bye >/dev/null

3

없는 경우 pinentry-cursesyum 또는 apt-get을 사용 하여 설치하십시오 .

그런 다음 다음을 실행하십시오.

sudo update-alternatives --config pinentry

목록에서 pinentry-curses를 선택하십시오.


2

여기 에서 내 대답을 복사 하겠습니다 ...

를 보면 man pinentry-gnome3다음과 같습니다.

   pinentry-gnome3  implements  a PIN entry dialog based on GNOME 3, which
   aims to follow the GNOME Human Interface Guidelines as closely as  pos‐
   sible.   If the X Window System is not active then an alternative text-
   mode dialog will be used.  There are other flavors that  implement  PIN
   entry dialogs using other tool kits.

불행히도이 텍스트 모드 대체는 작동하지 않습니다. 다른 사람들도 같은 문제 가있는 것 같습니다 . 그러나이 의견 은 다른 GUI 핀 입력 프로그램을 시도하도록 자극했습니다 pinentry-gtk2. 다음과 같이 전환 할 수 있습니다.

> sudo update-alternatives --config pinentry
There are 3 choices for the alternative pinentry (providing /usr/bin/pinentry).

  Selection    Path                      Priority   Status
------------------------------------------------------------
* 0            /usr/bin/pinentry-gnome3   90        auto mode
  1            /usr/bin/pinentry-curses   50        manual mode
  2            /usr/bin/pinentry-gnome3   90        manual mode
  3            /usr/bin/pinentry-gtk-2    85        manual mode

Press <enter> to keep the current choice[*], or type selection number: 3
update-alternatives: using /usr/bin/pinentry-gtk-2 to provide /usr/bin/pinentry (pinentry) in manual mode

일단 전환하면 완벽하게 작동했습니다! 데스크탑의 터미널에서는 GUI 암호 입력을 사용하지만 컴퓨터에 ssh하면 텍스트 모드 암호 입력이 사용됩니다.


1

협공 팝업을 방지하기 위해 할 수 ssh localhost있습니다. X11을 강제로 비활성화 할 수 -x Disables X11 forwarding.있습니다 (아래의 전체 예 참조).

patrick@patrick-C504:~$ ssh localhost
patrick@localhost's password: 
Welcome to Ubuntu 14.04.3 LTS (GNU/Linux 3.13.0-68-generic x86_64)

 * Documentation:  https://help.ubuntu.com/

Last login: Mon Nov 16 22:48:53 2015 from localhost
patrick@patrick-C504:~$ gpg --gen-key
gpg (GnuPG) 1.4.16; Copyright (C) 2013 Free Software Foundation, Inc.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

Please select what kind of key you want:
   (1) RSA and RSA (default)
   (2) DSA and Elgamal
   (3) DSA (sign only)
   (4) RSA (sign only)
Your selection? 4
RSA keys may be between 1024 and 4096 bits long.
What keysize do you want? (2048) 
Requested keysize is 2048 bits
Please specify how long the key should be valid.
         0 = key does not expire
      <n>  = key expires in n days
      <n>w = key expires in n weeks
      <n>m = key expires in n months
      <n>y = key expires in n years
Key is valid for? (0) 
Key does not expire at all
Is this correct? (y/N) y

You need a user ID to identify your key; the software constructs the user ID
from the Real Name, Comment and Email Address in this form:
    "Heinrich Heine (Der Dichter) <heinrichh@duesseldorf.de>"

Real name: Foo
Name must be at least 5 characters long
Real name: FooBar
Email address: foorbar@foo.bar
Comment: 
You selected this USER-ID:
    "FooBar <foorbar@foo.bar>"

Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? o
You need a Passphrase to protect your secret key.

gpg: gpg-agent is not available in this session
Enter passphrase:

3
어떤 X11 기능을 구체적으로 비활성화해야합니까? 나는 개인적으로 내 질문에 대한 답변을 알고 있으며 저자는 그렇지 않으므로이 정보가 없으면 답변이 불완전한 것처럼 보입니다.
Ramhound

로컬 호스트로의 ssh'ing은 충분했지만 -x Disables X11 forwarding.X11 전달을 선택적으로 방지해야합니다. 답변이 업데이트되었습니다.
PvdL

-X 이상의 pinentry가 표시되지 않는다는 점을 감안할 때이 솔루션을 선호합니다. 일반적으로 X pinentry를 원할 때 실제로 랩톱에 있습니다 (conf 파일을 항상 편집하고 싶지는 않습니다). 나는 ssh -X로 들어가서 여전히 저주 협박을 원할 수도 있습니다. 물론, 이상적으로, gtk pinentry는 실제로 ssh -X :-/
unhammer

1

PvdL의 답변에서 "전체 예"가 약간 혼란 스럽습니다. 다음은 내가하는 일입니다.

ssh -X machine
# work hack hack work until I need something from gpg
ssh -x localhost -p$port
gpg2 --decrypt file.gpg
# enter password to pinentry
exit
# now the key is unlocked in gpg-agent, and I can keep decrypting files
# from my X ssh session without being asked for the password

0

당신이 경우 export GPG_TTY=$(tty)unset DISPLAY는 암호를 묻는 TLI 대화 상자를 제공 할 것입니다. 올바른 암호를 입력하면 암호가 해독됩니다.

위의 GPG_TTY 내보내기 및 DISPLAY 설정 해제를 수행하지 않으면 X Windows를 사용할 것으로 예상됩니다. X11 전달이 설정된 MS-Windows 시스템에서 세션 (예 : PuTTY)을 시작한 경우 X- 윈도우 대화 상자를 MS Windows 시스템으로 보내려고합니다. Windows에서 Exceed 또는 Cygwin / X와 같은 X 에뮬레이터를 사용하여 암호문에 대한 X-Window 프롬프트가 MS-Windows 상자에 나타날 수 있습니다.

그러나 --batch옵션으로 명령 행을 실행하고 옵션으로 암호를 입력하여 GPG_TTY를 설정하고 DISPLAY를 설정 해제하고 TLI 또는 GUI를 가져올 필요가 없습니다 --passphrase.

gpg --batch --passphrase "<passphrase>" -o "<decrypted output file name>" --decrypt "<encrypted input file name>"

3 가지 방법 모두 오늘 gnupg2를 실행하는 RHEL6에서 효과적이었습니다.


2
에 따르면 로코 화이트의 대답은 , export GPG_TTY=$(tty)충분하다. 당신은 그것을 시도 했습니까? 당신은 말한다 참조해야합니까 unset DISPLAY입니다 또한 필요를? 추신 : 사람들은 명령 줄에 암호 문구를 넣는 것을 좋아하지 않습니다.
스콧
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.