linux – GPG でコンソールモードの pinentry を使ってパスワードを要求するには?

console gnupg linux ssh terminal

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

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

古い GPG バージョンでは SSH セッションではテキストベースのプロンプトは正常に動作していましたが、アップグレード後は失敗していました

--textmodeのコマンドラインスイッチがあるのですが、どうやら別のことをしているようです

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

  87  None  2012-12-18


ベストアンサー

ピンエントリを恒久的に変更するには、~/.gnupg/gpg-agent.confに次のように追加します

pinentry-program /usr/bin/pinentry-tty

(pinentry-tty がない古いバージョンでは、pinentry-curses を使用して ‘full-terminal’ ダイアログウィンドウを表示します)

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

gpg-connect-agent reloadagent /bye

106  user1686  2012-12-18


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

gpg: key FE17AE6D/FE17AE6D: エージェントへの送信エラー。許可が拒否されました。 gpg: エラーで skey 配列を構築しています。許可が拒否されました

私はその後、私のために働いていたthisを見つけたので、簡単に言えば

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

9  racitup  2017-10-16


debian ボックスで

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

(そしてpinentry-ttyに設定)

9  John Lawrence Aspden  2018-12-05


Ubuntu 18.04では、gpg 2.2.4のデフォルトインストールで、私は持っています

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

テキストベースの暗証番号入力ができるようにするには、以下のようにしました

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

7  Roc White  2019-02-20


私の回答をこちらからコピーします

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すると、テキストモードのパスワード入力を使用します

5  mblythe  2018-05-31


持っていない場合は、yumかapt-getでpinentry-cursesをインストールします

Then, run:

sudo update-alternatives --config pinentry

そして、リストからpinentry-cursesを選択します

5  Aiden Woodruff  2018-08-11


ピンエントリのポップアップを防ぐには 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:

2  PvdL  2015-11-16


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

1  unhammer  2017-01-04


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 エミュレータを使って、パスフレーズのための X-Window プロンプトを MS-Windows ボックスに表示できるようにすることができます

しかし、--batchオプションでコマンドラインを実行し、--passphraseオプションでパスフレーズを入れれば、GPG_TTYを設定してDISPLAYを解除し、TLIかGUIのどちらかを取得する必要がなくなります

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

gnupg2 を実行している RHEL6 上では、この 3 つの方法はすべて動作しました

0  MensaWater  2019-05-30


タイトルとURLをコピーしました