पासवर्ड के लिए संकेत करने के लिए कंसोल-मोड पिनेंट्री का उपयोग करने के लिए जीपीजी को कैसे मजबूर किया जाए?


64

कंसोल-आधारित वातावरण जैसे ssh सत्रों से gpg का उपयोग करना विफल रहता है क्योंकि SSK सत्र में GTK पिनेंट्री संवाद नहीं दिखाया जा सकता है।

मैंने कोशिश की unset DISPLAY लेकिन इससे कोई फायदा नहीं हुआ। GPG कमांड लाइन विकल्पों में कंसोल-मोड में पिनेंट्री को मजबूर करने के लिए एक स्विच शामिल नहीं है।

पुराने GPG संस्करणों ने एक पाठ-आधारित प्रांप्ट की पेशकश की जो SSH सत्रों में ठीक काम करती है लेकिन उन्नयन के बाद यह विफल हो जाती है।

वहाँ है --textmode कमांड लाइन स्विच लेकिन जाहिर है, यह कुछ और करता है।

दूरस्थ सत्रों के लिए सादा-पाठ पिन प्रविष्टि प्राप्त करने का उचित और साफ तरीका क्या होगा?


DISPLAY="" gpg2 ... मेरी मदद की, मैंने पहले से ही पेंटेंट्री-शाप + पिनेंट्री-ट्टी को स्थापित किया, यह सुनिश्चित नहीं किया कि क्या वे सख्ती से आवश्यक हैं
ThorSummoner

जवाबों:


78

पिनेंट्री को स्थायी रूप से बदलने के लिए, निम्नलिखित को अपने पास जोड़ें ~/.gnupg/gpg-agent.conf:

pinentry-program /usr/bin/pinentry-tty

(पुराने संस्करणों में जिनमें पेंटेंट्री-ट्टी की कमी है, 'पूर्ण-टर्मिनल' संवाद विंडो के लिए पेंट्री-श्राप का उपयोग करते हैं।)

कॉन्फ़िगरेशन को पुनः लोड करने के लिए GPG एजेंट को बताएँ:

gpg-connect-agent reloadagent /bye

8
यह पूरी तरह से "समझदार" नहीं है। सामान्य रूप से, gpg-agent खुद की मौजूदगी या कमी का पता लगाना चाहिए $DISPLAY और उपयुक्त पिनेंट्री चुनें ...
grawity

4
एजेंट सबसे अधिक संभावना है कि वह एक चालू Xorg की उपस्थिति का पता लगाने में सक्षम हो। लेकिन होने एक DISPLAY परिभाषित करने का मतलब यह नहीं है कि मैं इसका उपयोग कर सकता हूं या इसका उपयोग करना चाहता हूं, उदाहरण के लिए, जब एसएसएच से जुड़ा हो।
ccpizza

3
@lfxgroove: समस्या यह है कि su अपने TTY के स्वामित्व को परिवर्तित नहीं करता है, इसलिए आपको मैन्युअल रूप से करने की आवश्यकता है chown यह। देख यह लेख
Rufflewind

2
@ स्टार्क्स: आप एक बनाते हैं।
grawity

3
एक और टिप: सभी उपलब्ध विकल्पों को देखने के लिए, टाइप करें ls /usr/bin | grep pinentry। समझा pinentry, pinentry-curses, pinentry-emacs, pinentry-gnome3, pinentry-gtk2, pinentry-qt तथा pinentry-tty। इस तरह आप एक का चयन कर सकते हैं जो आपके लिए बेहतर है, अगर आपके पास कमी नहीं है $DISPLAY मुद्दा।
Jeffrey Lebowski

7

मेरे पास सिर्फ उबंटू 16.04.3 पर यह समस्या थी, जब एक पासवर्ड के बिना एक सिस्टम अकाउंट पर gpg2 (2.1.11) का उपयोग कर एक निजी कुंजी उत्पन्न करने और स्थापित करने की कोशिश की जा रही थी, और ssh पर एक उपयोगकर्ता खाते पर। कुछ भी काम नहीं दिया:

gpg: key FE17AE6D / FE17AE6D: एजेंट को भेजने में त्रुटि: अनुमति से इनकार किया गया
gpg: skey array बनाने में त्रुटि: अनुमति अस्वीकृत

मैंने तब पाया इस जो मेरे लिए काम किया, इसलिए संक्षेप में:

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

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

मैं इस समाधान को पसंद करता हूं, यह देखते हुए कि पिनेंट्री ओवर-एक्स दिखाई नहीं देता है - मैं सामान्य रूप से शारीरिक रूप से अपने लैपटॉप पर हूं, जहां मैं एक्स पिनेंट्री चाहता हूं (इसलिए मैं हर समय एक फ़ाइल को संपादित नहीं करना चाहता), लेकिन अगर मैं ssh-x में होता हूं, मैं अभी भी एक शाप देना चाहता हूं। बेशक, आदर्श रूप से, gtk पेंटेंट्री वास्तव में ssh -X पर काम करेगी: - /
unhammer

1

मैं अपने उत्तर की नकल करूँगा यहाँ पर ...

देखना 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-curses yum या apt-get के साथ।

फिर भागो:

sudo update-alternatives --config pinentry

और सूची से पिनेंट्री-शापों का चयन करें।


1

एक डेबियन बॉक्स पर:

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

(और इसे पेंट्री-ट्टी पर सेट करें)


0

मुझे 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
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.