GPG, şifreler sormak için konsol kipindeki pinentri kullanmaya nasıl zorlanır?


75

GTK pinentry iletişim kutusu bir SSH oturumunda gösterilemediğinden, ssh oturumları gibi konsol tabanlı bir ortamdan gpg kullanmak başarısız olur.

Denedim unset DISPLAYama işe yaramadı. GPG komut satırı seçenekleri, pinentry'i konsol moduna zorlamak için bir anahtar içermez.

Daha eski GPG sürümleri, SSH oturumlarında iyi çalışan, metin tabanlı bir komut istemişti ancak yükseltme işleminden sonra başarısız oluyor.

Orada --textmodekomut satırı anahtarı ama görünüşe göre, başka bir şey yok.

Uzak oturumlar için düz metin pin girişi almanın doğru ve temiz yolu ne olurdu?


DISPLAY="" gpg2 ...bana yardım etti, ayrıca pinentry-curses + pinentry-tty'i önceden kurdum, kesinlikle gerekip gerekmediğinden emin değilim
ThorSummoner

Yanıtlar:


89

Pinentry'i kalıcı olarak değiştirmek için, aşağıdakini aşağıdakilere ekleyin ~/.gnupg/gpg-agent.conf:

pinentry-program /usr/bin/pinentry-tty

(Pinentry-tty eksikliği olan eski sürümlerde, 'tam terminal' iletişim penceresi için pinentry-curses kullanın.)

GPG temsilcisine yapılandırmayı yeniden yüklemesini söyleyin:

gpg-connect-agent reloadagent /bye

9
Tamamen "aklı başında" değil. Normal olarak, gpg-agentkendisi varlığı veya yokluğunu tespit etmeli $DISPLAYve uygun pinentriyi seçmelidir ...
yerçekimi

6
Aracı, büyük olasılıkla, çalışan bir xorg'un varlığını saptayabilir. Ancak DISPLAYtanımlanmış olması zorunlu olarak, örneğin SSH üzerinden bağlanıldığında kullanabileceğim veya kullanmak isteyeceğim anlamına gelmez.
ccpizza

4
@lfxgroove: Sorun şu ki su, TTY'nizin sahipliğini değiştirmiyor, bu yüzden manuel olarak yapmanız gerekiyor chown. Bu yazıya bakınız .
Rufflewind

2
@Starx: Bir tane yarattınız.
Gravity

3
Başka bir ipucu: mevcut tüm seçenekleri görüntülemek için, yazın ls /usr/bin | grep pinentry. Anlıyorum pinentry, pinentry-curses, pinentry-emacs, pinentry-gnome3, pinentry-gtk2, pinentry-qtve pinentry-tty. Bu sayede, eğer $DISPLAYsorununuz yoksa, size daha uygun olanı seçebilirsiniz .
Jeffrey Lebowski

8

Bu sorunu Ubuntu 16.04.3'te, gpg2 (2.1.11) 'i şifresiz bir sistem hesabında ve ssh üzerinden bir kullanıcı hesabında kullanarak bir özel anahtar oluşturmaya / yüklemeye çalışırken yaşadım. Hiçbir şey vermeye çalıştı:

gpg: anahtar FE17AE6D / FE17AE6D: aracıya gönderme hatası: İzin reddedildi
gpg: hata oluşturma skey dizisi hatası: İzin reddedildi

Sonra buldum bu kısaca yüzden, benim için çalıştı hangi:

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

5

Bir debian kutusunda:

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

(ve pinentry-tty'ye ayarlayın)


4

Ubuntu 18.04’te, varsayılan gpg 2.2.4’ün kurulumu ile

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

Metin tabanlı bir PIN girişine sahip olmak için aşağıdakileri yapabildim:

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

3

Eğer yoksa, pinentry-cursesyum veya apt-get ile yükleyin .

O zaman koş:

sudo update-alternatives --config pinentry

Ve listeden pinentry-curses'u seçin.


2

Cevabımı buradan göndereceğim ...

Bakıyorum man pinentry-gnome3, şunu görüyorum:

   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.

Ne yazık ki, bu metin modu geri dönüş benim için çalışmıyor. Başkalarının da aynı sorunu var gibi görünüyor . Ancak bu açıklama , farklı bir GUI pin giriş programını denemek gözlerimi teşvik: pinentry-gtk2. Bu şekilde değiştirebilirsiniz:

> 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

Bir kere değiştim, benim için mükemmel çalıştı! Masaüstünde bir terminalde, GUI parola girişini kullanır, ancak makineme girdiğimde metin modu parola girişini kullanır.


1

Pinentry açılır penceresini önlemek için olabilir ssh localhost. İsteğe bağlı olarak X11'i devre dışı bırakma, -x Disables X11 forwarding.Aşağıdaki örneğe bakın.

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
Hangi X11 özellikleri özellikle devre dışı bırakılmalıdır? Şahsen sorumun cevabını biliyorum, yazar bilmiyor, bu yüzden cevap bu bilgi olmadan eksik görünüyor.
Ramhound

Yerel sunucuya ssh'lamak benim için yeterliydi, ancak isteğe bağlı olarak -x Disables X11 forwarding.herhangi bir X11 iletimini engellemeliydi. Cevap güncellendi.
PvdL

Bu çözümü tercih ediyorum, çünkü X'in üzerinde pinentry görünmüyor - Normalde fiziksel olarak dizüstü bilgisayarımdayım, burada X pinentry istiyorum (bu yüzden her zaman bir conf dosyasını düzenlemek istemiyorum) Ben içine ssh-X olur hala bir küfürler pinentry isteyebilirim. Tabii ki, ideal olarak, gtk pinentry aslında ssh -X üzerinde çalışacaktı: - /
utanmaz

1

PvdL'nin cevabındaki "tam örneği" biraz kafa karıştırıcı buldum, işte yaptığım şey:

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

Bunu yaparsanız export GPG_TTY=$(tty)ve unset DISPLAYparola soran bir TLI iletişim kutusu verecektir. Doğru parola yazarak şifresini çözmek.

Yukarıdaki GPG_TTY ihracatını yapmazsanız ve DISPLAY grubunu ayarlamazsanız, X Windows kullanmayı bekler. Oturumunuzu (PuTTY gibi) X11 iletme özelliği açık olan bir MS-Windows sisteminden başlattıysanız, X-Window iletişim kutusunu MS Windows sisteminize göndermek ister. X-Window komut isteminin parola ifadesinin MS-Windows kutunuzda görünmesini sağlamak için Windows'ta Exceed veya Windows'ta Cygwin / X gibi bir X emülatörü kullanabilirsiniz.

Bununla birlikte, GPG_TTY ayarını yapma ve DISPLAY özelliğini kaldırma ve komut satırını --batchseçenekle çalıştırarak ve parolayı seçenekle birlikte koyarak TLI veya GUI alma gereksinimini ortadan kaldırabilirsiniz --passphrase:

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

Bugün 3 yöntem de gnupg2 çalışan RHEL6'da benim için çalıştı.


2
Göre Roc White'ın cevap , export GPG_TTY=$(tty)yeterlidir. Bunu denedin mi? Bunu söyleyen bir başvuru var mı unset DISPLAYolduğunu da gerekli? PS İnsanlar komut satırına parola koymak istemez.
Scott,
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.