Bagaimana cara memaksa GPG untuk menggunakan pinentry mode-konsol untuk meminta kata sandi?

76

Menggunakan gpg dari lingkungan berbasis konsol seperti sesi ssh gagal karena dialog pinentry GTK tidak dapat ditampilkan dalam sesi SSH.

Saya mencoba unset DISPLAYtetapi tidak membantu. Opsi baris perintah GPG tidak termasuk sakelar untuk memaksa pinentry ke mode konsol.

Versi GPG yang lebih lama menawarkan prompt berbasis teks yang berfungsi dengan baik dalam sesi SSH tetapi setelah peningkatannya gagal.

Ada --textmodesaklar baris perintah tetapi ternyata, ia melakukan sesuatu yang lain.

Apa cara yang tepat dan bersih untuk mendapatkan entri pin teks biasa untuk sesi jarak jauh?

ccpizza
sumber
DISPLAY="" gpg2 ...membantu saya, saya juga menginstal pinentry-curses + pinentry-tty sebelumnya, tidak yakin apakah mereka benar-benar diperlukan
ThorSummoner

Jawaban:

90

Untuk mengubah pinentry secara permanen, tambahkan yang berikut ke Anda ~/.gnupg/gpg-agent.conf:

pinentry-program /usr/bin/pinentry-tty

(Dalam versi yang lebih lama yang tidak memiliki pinentry-tty, gunakan kutukan pinentry untuk jendela dialog 'terminal penuh'.)

Beri tahu agen GPG untuk memuat ulang konfigurasi:

gpg-connect-agent reloadagent /bye
grawity
sumber
9
Itu tidak sepenuhnya "waras". Biasanya, gpg-agentharus dengan sendirinya mendeteksi ada atau tidaknya $DISPLAYdan memilih pinentry yang sesuai ...
grawity
6
Agen tersebut kemungkinan besar mampu mendeteksi keberadaan xorg yang sedang berjalan. Tetapi memiliki DISPLAYdefinisi tidak selalu berarti saya dapat atau ingin menggunakannya, misalnya, ketika terhubung melalui SSH.
ccpizza
4
@ lfxgroove: masalahnya adalah sutidak mengubah kepemilikan TTY Anda, jadi Anda harus secara manual chown. Lihat artikel ini .
Rufflewind
2
@Starx: Anda membuat satu.
grawity
3
Kiat lain: untuk melihat semua opsi yang tersedia, ketik ls /usr/bin | grep pinentry. Saya melihat pinentry, pinentry-curses, pinentry-emacs, pinentry-gnome3, pinentry-gtk2, pinentry-qtdan pinentry-tty. Dengan cara ini Anda dapat memilih yang cocok untuk Anda, jika Anda tidak memiliki $DISPLAYmasalah.
Jeffrey Lebowski
8

Saya baru saja mengalami masalah ini di Ubuntu 16.04.3 ketika mencoba menghasilkan / menginstal kunci pribadi menggunakan gpg2 (2.1.11) pada akun sistem tanpa kata sandi, dan pada akun pengguna lebih dari ssh. Tidak ada yang berhasil memberi:

gpg: kunci FE17AE6D / FE17AE6D: kesalahan pengiriman ke agen: Izin ditolak
gpg: kesalahan susunan skey array: Izin ditolak

Saya kemudian menemukan ini yang bekerja untuk saya, jadi singkatnya:

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

Di kotak debian:

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

(dan atur ke pinentry-tty)

John Lawrence Aspden
sumber
4

Di Ubuntu 18.04, dengan instalasi default gpg 2.2.4, saya punya

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

Saya dapat melakukan hal berikut untuk mendapatkan entri PIN berbasis teks:

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

Jika Anda tidak memilikinya, instal pinentry-cursesdengan yum atau apt-get.

Lalu lari:

sudo update-alternatives --config pinentry

Dan pilih pinentry-curses dari daftar.

Aiden Woodruff
sumber
2

Saya akan menyalin jawaban saya dari sini ...

Melihat man pinentry-gnome3, saya melihat ini:

   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.

Sayangnya, fallback mode teks ini tidak berfungsi untuk saya. Tampaknya orang lain memiliki masalah yang sama . Namun, komentar ini memacu saya untuk mencoba program pin-entry GUI yang berbeda: . Anda dapat beralih seperti ini: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

Setelah saya beralih, itu bekerja dengan baik untuk saya! Di terminal di desktop, itu akan menggunakan entri kata sandi GUI, tetapi ketika saya ssh ke mesin saya, itu akan menggunakan entri kata sandi mode teks.

mblythe
sumber
1

Untuk mencegah popup pinentry, Anda dapat melakukannya ssh localhost. Opsional memaksa X11 dinonaktifkan, -x Disables X11 forwarding.Lihat contoh lengkap di bawah ini.

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) <[email protected]>"

Real name: Foo
Name must be at least 5 characters long
Real name: FooBar
Email address: [email protected]
Comment: 
You selected this USER-ID:
    "FooBar <[email protected]>"

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:
PvdL
sumber
3
Fitur X11 mana yang secara khusus harus dinonaktifkan? Saya pribadi tahu jawaban pertanyaan saya, penulis tidak, jadi jawabannya sepertinya tidak lengkap tanpa informasi ini.
Ramhound
ssh'ing ke host lokal sudah cukup untuk saya, tetapi secara opsional -x Disables X11 forwarding.harus mencegah penerusan X11. Jawaban diperbarui.
PvdL
Saya lebih suka solusi ini, mengingat bahwa pinentry lebih dari -X tidak muncul - Saya biasanya secara fisik di laptop saya, di mana saya ingin X pinentry (jadi saya tidak ingin mengedit file conf sepanjang waktu), tetapi jika Saya kebetulan ssh -X ke dalamnya saya mungkin masih ingin pinentry kutukan. Tentu saja, idealnya, pinentry gtk akan benar-benar bekerja pada ssh -X: - /
unhammer
1

Saya menemukan "contoh lengkap" dalam jawaban PvdL agak membingungkan, inilah yang saya lakukan:

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
tidak tahu malu
sumber
0

Jika Anda melakukannya export GPG_TTY=$(tty)dan unset DISPLAYitu akan memberikan kotak dialog TLI yang meminta frasa sandi. Mengetik frasa sandi yang benar membuatnya mendekripsi.

Jika Anda TIDAK melakukan ekspor GPG_TTY di atas dan menghapus DISPLAY, itu diharapkan menggunakan X Windows. Jika Anda meluncurkan sesi Anda (seperti Putty) dari sistem MS-Windows dengan penerusan X11 diaktifkan, ia ingin mengirim dialog X-Window ke sistem MS Windows Anda. Anda dapat menggunakan emulator X seperti Melebihi atau Cygwin / X pada Windows untuk memungkinkan prompt X-Window untuk frasa sandi muncul di kotak MS-Windows Anda.

Namun, Anda dapat menghilangkan kebutuhan untuk mengatur GPG_TTY dan menghapus DISPLAY dan mendapatkan TLI atau GUI dengan menjalankan baris perintah dengan --batchopsi dan memasukkan frasa sandi dengan --passphraseopsi:

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

Semua 3 metode bekerja untuk saya hari ini di RHEL6 menjalankan gnupg2.

MensaWater
sumber
2
Menurut jawaban Roc White , export GPG_TTY=$(tty)sudah cukup. Sudahkah Anda mencobanya? Apakah Anda memiliki referensi yang mengatakan bahwa unset DISPLAYini juga diperlukan? PS Orang tidak suka meletakkan frasa sandi di baris perintah.
Scott