GPGにコンソールモードのpinentryを使用してパスワードの入力を要求する方法


76

GTK pinentryダイアログをSSHセッションで表示できないため、sshセッションなどのコンソールベースの環境からgpgを使用すると失敗します。

試しましたunset DISPLAYが、助けにはなりませんでした。GPGコマンドラインオプションには、ピンエントリをコンソールモードに強制するためのスイッチは含まれていません。

古いGPGバージョンでは、SSHセッションでは正常に機能するテキストベースのプロンプトが提供されていましたが、アップグレード後は失敗します。

--textmodeコマンドラインスイッチはありますが、明らかに何か他のことを行います。

リモートセッションのプレーンテキストピンエントリを取得する適切でクリーンな方法は何でしょうか。


DISPLAY="" gpg2 ...私を助けて、事前にpinentry-curses + pinentry-ttyもインストールしました。厳密に必要かどうかは
わかり

回答:


90

pinentryを恒久的に変更するには、以下を以下に追加します~/.gnupg/gpg-agent.conf

pinentry-program /usr/bin/pinentry-tty

(pinentry-ttyのない古いバージョンでは、 '全端子'ダイアログウィンドウにpinentry-cursesを使用します。)

GPGエージェントに設定を再ロードするように指示します。

gpg-connect-agent reloadagent /bye

9
それは完全に「正気」ではありません。通常は、gpg-agentそれ自体はの存在または欠如を検出しなければならない$DISPLAY...と良いと考えpinentryを選択してください
grawity

6
エージェントは、実行中のxorgの存在を検出できる可能性が最も高いです。ただし、DISPLAY定義されているということは、たとえばSSHで接続されている場合など、必ずしも使用できる、または使用したいという意味ではありません。
ccpizza

4
@lfxgroove:問題はsu、TTYの所有権を変更しないchownことです。そのため、手動でTTYを所有する必要があります。こちらの記事をご覧ください。
Rufflewind

2
@Starx:作成します。
grawity

3
別のヒント:使用可能なすべてのオプションを表示するには、と入力しls /usr/bin | grep pinentryます。なるほどpinentrypinentry-cursespinentry-emacspinentry-gnome3pinentry-gtk2pinentry-qtpinentry-tty。この方法により、問題がない場合は、自分に合ったものを選択できます$DISPLAY
ジェフリー

8

Ubuntu 16.04.3でgpg2(2.1.11)を使用して、パスワードなしのシステムアカウントとssh上のユーザーアカウントで秘密キーを生成/インストールしようとすると、この問題が発生しました。与えるものは何も動作しませんでした:

gpg:キーFE17AE6D / FE17AE6D:エージェントへの送信エラー:許可が拒否されました
gpg:skey配列の構築エラー:許可が拒否されました

私はそれから私のために働いたこれを見つけたので、簡潔に:

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


4

Ubuntu 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-curses、yumまたは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

pinentryポップアップを防ぐためにでき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機能を具体的に無効にする必要がありますか?私は自分の質問に対する答えを個人的に知っていますが、著者は知らないので、この情報がないと答えは不完全に見えます。
ラムハウンド

ローカルホストへのsshで十分でしたが、オプション-x Disables X11 forwarding.でX11転送を防ぐ必要があります。回答が更新されました。
PvdL

-X上のピンエントリが表示されないことを考えると、私はこのソリューションを好みます。私は通常、物理的にラップトップにいて、Xピンエントリが必要です(したがって、confファイルを常に編集したくない)。そこにssh -Xがたまたま入って、まだ呪いのピントナリーが欲しいかもしれません。もちろん、理想的には、gtk pinentryは実際にssh -Xで動作します:-/
アンハンマー

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-WindowダイアログをMS Windowsシステムに送信する必要があります。WindowsでExceedやCygwin / XなどのXエミュレータを使用して、MS-WindowsボックスにパスフレーズのX-Windowプロンプトを表示できます。

ただし、--batchオプション付きのコマンドラインを実行し、--passphraseオプション付きでパスフレーズを入力することにより、GPG_TTYを設定してDISPLAYを設定解除し、TLIまたはGUIを取得する必要性を排除できます。

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

今日、gnupg2を実行するRHEL6で3つの方法すべてが機能しました。


2
Roc Whiteの答えによると、これexport GPG_TTY=$(tty)で十分です。試しましたか?それ必要だと言っている参考文献unset DISPLAYありますか?PS人々はコマンドラインにパスフレーズを入れたくない。
スコット
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.