gpg --passphrase के साथ भी पासवर्ड मांगता है


65

मैं पासवर्ड के लिए पूछे बिना निम्न कमांड को gpg फ़ाइल निकालने की उम्मीद करता हूं:

  gpg --passphrase 1234 file.gpg

लेकिन यह पासवर्ड के लिए पूछता है। क्यों?

यह भी एक ही व्यवहार है:

  gpg --passphrase-file passfile.txt file.gpg

मैं गनोम 3 के साथ उबंटू का उपयोग करता हूं, और याद रखें कि यह फेडोरा में काम कर रहा था


1
क्या आप सुनिश्चित gpgहैं कि सही कमांड नहीं है, न ही एक उपनाम और न ही एक आवरण। प्रयास करें /usr/bin/gpg --passphrase 1234 file.gpg, type gpg, gpg --versionऔरset | grep '^.\{0,9\}PG'
एफ HAURI

केवल रिकॉर्ड के लिए, यदि आप GPG के पुराने संस्करण का उपयोग करते हैं, तो उसे काम करना चाहिए (उबंटू पर और, यह gngg1 पैकेज है। हालांकि, वे इसे तब तक हतोत्साहित करते हैं, जब तक कि आपको इसका उपयोग न करना पड़े।
Shule

यह भी ध्यान दें कि GPG में 2.x gpg --list-packets --batch myFile.gpgपासफ़्रेज़ के लिए संकेत देता है, जबकि यह GPG 1.x में नहीं है। यह मेरी समस्या थी (एक प्रोग्राम में, जो मैं लिख रहा हूँ), जबकि मुझे लगा कि मुझे आपकी समस्या है - (-लिस्ट-पैकेट चीज़ को पहले निष्पादित किया गया, डिक्रिप्ट करने का प्रयास करने से पहले, और मुझे ध्यान नहीं आया)। इसलिए, मैंने यह निर्धारित करने के लिए एक नया तरीका बनाया कि क्या फ़ाइलों को एन्क्रिप्ट किया गया था।
Shul

जवाबों:


58

मैं आपकी ठीक उसी नाव में हूं (इसने फेडोरा पर काम किया लेकिन उबंटू नहीं)। यहाँ मैंने खोजा एक स्पष्ट काम है:

echo your_password | gpg --batch --yes --passphrase-fd 0 your_file.gpg

स्पष्टीकरण: पासिंग फ़ाइल के बजाय STDIN से पढ़ने का 0कारण बनता --passphrase-fdहै। तो, पासफ़्रेज़ को पाइप --passphrase-fdकरने पर आपके निर्दिष्ट पासवर्ड स्ट्रिंग को स्वीकार करना होगा ।


16
--batch --yesमेरे लिए ऊपर काम करने के लिए जोड़ना ।
रयान टक

1
लेकिन फिर मुझे एक समस्या आती है, अगर मैं gpg में डाले गए डेटा को एन्क्रिप्ट करना चाहता हूं, जैसे echo "encrypt me" | gpg --passphrarse "mypw" -c -o test.gpg। मैं इसे कैसे हल करूं?
con-f-use

2
खैर, gpg के Ubuntu संस्करण के साथ, echo "encrypt me" | gpg --passphrase "mypassphrase" --batch --quiet --yes --no-use-agent -c -o encrypted.gpgकाम करने लगता है।
कॉन-एफ-यूज

1
मैं ( Inappropriate ioctl for deviceबिना --batchgpg (GnuPG) 2.1.18 पर) यहां और उसके बिना हो रहा हूं ।
निको श्लोमर

2
@RyanGriggs मुझे ऐसा नहीं लगता। echo "hello" | catऔर echo "hello"| catदोनों एक ही स्ट्रिंग प्राप्त करते हैं।
टॉरस्ट ब्रोंगर

36

2017-12-04 को अपग्रेड किया गया। (जोड़ने - पासफ्रेज प्रॉम्प्ट को रोकने के लिए बैच)

आपको --batchविकल्प जोड़ना होगा :

के संस्करण 2 से GPG, विकल्प के --batchलिए कोई संकेत सुनिश्चित करने की जरूरत है ... ठीक है, यह देखते हुए:

$ gpg --version
gpg (GnuPG) 2.1.18
libgcrypt 1.7.6-beta
Copyright (C) 2017 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <https://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

Home: /home/user /.gnupg
Supported algorithms:
Pubkey: RSA, ELG, DSA, ECDH, ECDSA, EDDSA
Cipher: IDEA, 3DES, CAST5, BLOWFISH, AES, AES192, AES256, TWOFISH,
        CAMELLIA128, CAMELLIA192, CAMELLIA256
Hash: SHA1, RIPEMD160, SHA256, SHA384, SHA512, SHA224
Compression: Uncompressed, ZIP, ZLIB, BZIP2

कोशिश कर रहे हैं:

$ newdir=$(mktemp -d)
$ cd $newdir
$ seq 1 10 | gpg -c --batch --passphrase 1234 -o file.gpg -
$ ls -ltr
total 4
-rw-r--r-- 1 user  user  91 Dec  4 15:42 file.gpg
$ hd file.gpg 
00000000  8c 0d 04 07 03 02 ea fa  d0 d3 2b 9a ea 06 df d2  |..........+.....|
00000010  4a 01 ed 50 74 ff 27 45  0e 6c 94 74 db e9 8a a5  |J..Pt.'E.l.t....|
00000020  03 9f 67 a0 73 97 e9 15  6b 56 a0 f0 88 71 85 a8  |..g.s...kV...q..|
00000030  dc 41 71 9f fa 3b f9 9d  af ac 80 eb f4 f7 28 19  |.Aq..;........(.|
00000040  9f be 75 47 e6 d8 00 3e  f6 60 f1 00 5e 63 57 ef  |..uG...>.`..^cW.|
00000050  14 c3 4b 20 ff 94 03 03  c1 fc 98                 |..K .......|
0000005b

अच्छा प्रतीत होता है! तो अब:

$ gpg -d --batch --passphrase 1234 file.gpg
gpg: AES encrypted data
gpg: encrypted with 1 passphrase
1
2
3
4
5
6
7
8
9
10

जबकि कोई -dपैरामीटर नहीं दिया गया है (एसओ के प्रश्न के रूप में एक ही वाक्यविन्यास), से डीक्रिप्ट file.gpgकिए गए डेटा को एक नए में निकाला जाएगा file

$ gpg --batch --passphrase 1234 file.gpg
gpg: WARNING: no command supplied.  Trying to guess what you mean ...
gpg: AES encrypted data
gpg: encrypted with 1 passphrase

$ ls -ltr
total 8
-rw-r--r-- 1 user  user  91 Dec  4 15:42 file.gpg
-rw-r--r-- 1 user  user  21 Dec  4 15:44 file

$ cat file
1
2
3
4
5
6
7
8
9
10

यह काम अच्छा है!

$ cd -
$ rm -fR $newdir
$ unset newdir

आपको चेतावनी नहीं मिल रही है "gpg: gpg-agent इस सत्र में उपलब्ध नहीं है" तो आपके पास शायद एजेंट में संग्रहीत पासफ़्रेज़ है, शायद?
असफंद काजी

@AsfandYarQazi नहीं, पासफ़्रेज़ कमांड लाइन में दर्ज किया गया है।
एफ। हौरी

इस जवाब ने मेरे लिए काम किया। Gpg 1.4.16 के साथ उबंटू। --passphraseपैरामीटर बैच के संचालन के लिए काम करता है, और एक पासवर्ड के लिए संकेत नहीं है।
ट्रेवर सुलिवन

यह काम करने के लिए प्रकट हो सकता है क्योंकि कष्टप्रद gpg- एजेंट पासफ़्रेज़ को कैशिंग कर रहा है। रीबूटिंग सिस्टम को पूरी तरह से आज़माएँ और नए सिरे से शुरू करें, या गलत --passphrase 5678 (गलत पासफ़्रेज़) दर्ज करें।
यमन

@yahermann: अभी unset GPG_AGENT_INFOऔर बाद में भी कोशिश की GPG_AGENT_INFO=/dev/null, यह (जारी) काम करने के लिए ... शायद परेशान $GPG_AGENT_INFOकरने में मदद मिल सकती है !? (हमें बताएं; कृपया जवाब दें, मैं संपादित करूँगा यदि यह मदद करता है!)
एफ। हरिओ

21

Gpg संस्करण 2.x के लिए आपको उपयोग करने की आवश्यकता नहीं है --batch, बस

--pinentry-mode loopback  

उदाहरण के लिए फ़ाइल नाम संघर्ष के मामले में --passphrase& के साथ काम करता है --passphrase-file, और आपको नई जानकारी दर्ज करने देगा:

gpg --pinentry-mode loopback --passphrase-file=file encrypted.gpg

...
File 'encrypted' exists. Overwrite? (y/N)n
Enter new filename: f2

इसके विपरीत --batch, जल्दी से असफल हो जाएगा, कह रही है...failed: File exists

(डेबियन स्टेबल / स्ट्रेच के gpg 2.1.18 पर परीक्षण किया गया। महत्वपूर्ण --passphraseविकल्पों को अनदेखा करने का यह व्यवहार वास्तव में एक बग होना चाहिए, अगर यह पहले से ही नहीं है)


1
यह अच्छी तरह से Ubuntu पर भी काम करता है 18.04 बायोनिक के साथ gpg (GnuPG) 2.2.4
डिस्सेम्बलर

यह होमबॉव के साथ gpg स्थापित करने के बाद MacOS पर काम करता है
जोएल

15

ऐसा लगता है कि आप gpg2 का उपयोग कर रहे हैं। आपको --batchविकल्प में भी फेंकना होगा । (यदि आप इसे किसी स्क्रिप्ट में जोड़ने की योजना बना रहे हैं, तो आप --no-ttyऔर शायद इसमें जोड़ना भी चाहेंगे --yes।)


3
यह 1.4 है। का उपयोग कर - बैच का कोई प्रभाव नहीं है।
ओमिड

क्षमा करें तो @ निमा। मैं नहीं जानता कि आपको क्या बताना है। GnuPG v1.4 के साथ आपको उन विकल्पों में से किसी के साथ पासफ़्रेज़ को पास करने के लिए और कुछ करने की आवश्यकता नहीं होनी चाहिए।
rsaw

अच्छा नोट, @rsaw, ने मुझे पासवर्ड प्रॉम्प्ट (और थोड़ा कम सुरुचिपूर्ण इको / STDIN विकल्प) को रोकने में मदद की।
नियम

- खिड़कियों में भी मदद की। वू हू।
पाप

9

मेरे लिए, "-no-use-agent" को जोड़कर इसे "gpg (GnuPG) 1.4.16" के लिए हल किया गया:

date > foo
echo pass > passphrase
# w/o --no-use-agent
> rm -f foo.gpg; gpg --cipher-algo aes256 --output foo.gpg --passphrase-file ./passphrase --batch --yes --symmetric foo
gpg: gpg-agent is not available in this session
gpg: can't query passphrase in batch mode
gpg: error creating passphrase: invalid passphrase
gpg: symmetric encryption of `foo' failed: invalid passphrase


> rm -f foo.gpg; gpg --cipher-algo aes256 --output foo.gpg --passphrase-file ./passphrase --batch --yes --no-use-agent --symmetric foo
> ls -al
total 20
drwxr-xr-x  2 root root 4096 Aug 22 13:59 .
drwx------ 18 root root 4096 Aug 22 13:58 ..
-rw-r--r--  1 root root   30 Aug 22 13:58 foo
-rw-r--r--  1 root root  103 Aug 22 13:59 foo.gpg
-rw-r--r--  1 root root    5 Aug 22 13:58 passphrase

7

अगर gpg (GnuPG) का उपयोग कर रहे हैं 2.2.7 मैन पेज के अनुसार,

- गलशोथ fd n

फ़ाइल डिस्क्रिप्टर n से पासफ़्रेज़ पढ़ें। फ़ाइल डिस्क्रिप्टर n से केवल पहली पंक्ति पढ़ी जाएगी। यदि आप n के लिए 0 का उपयोग करते हैं, तो पासफ़्रेज़ STDIN से पढ़ा जाएगा। यह केवल तभी उपयोग किया जा सकता है जब केवल एक पासफ़्रेज़ की आपूर्ति की जाती है।

-पासफ़्रेज़-फ़ाइल फ़ाइल

फ़ाइल फ़ाइल से पासफ़्रेज़ पढ़ें। केवल पहली पंक्ति को फ़ाइल फ़ाइल से पढ़ा जाएगा। यह केवल तभी उपयोग किया जा सकता है जब केवल एक पासफ़्रेज़ की आपूर्ति की जाती है। जाहिर है, यदि किसी अन्य उपयोगकर्ता इस फ़ाइल को पढ़ सकते हैं, तो फ़ाइल में संग्रहीत पासफ़्रेज़ संदेहास्पद सुरक्षा का है। यदि आप इससे बच सकते हैं तो इस विकल्प का उपयोग न करें।

--पासफ्रेज़ स्ट्रिंग

पासफ़्रेज़ के रूप में स्ट्रिंग का उपयोग करें। यह केवल तभी उपयोग किया जा सकता है जब केवल एक पासफ़्रेज़ की आपूर्ति की जाती है। जाहिर है, बहु-उपयोगकर्ता प्रणाली पर यह बहुत ही संदिग्ध सुरक्षा है। यदि आप इससे बच सकते हैं तो इस विकल्प का उपयोग न करें।

--pinentry-mode loopbackकाम करने के लिए जोड़ें

ध्यान दें कि संस्करण 2.0 के बाद से यह पासफ़्रेज़ केवल तभी उपयोग किया जाता है जब विकल्प - बैच भी दिया गया हो। संस्करण 2.1 के बाद से - thepinentry- मोड को भी लूपबैक पर सेट करने की आवश्यकता है।

उदाहरण के लिए:

gpg --batch --yes --passphrase="pw" --pinentry-mode loopback -o out -d in

दोनों कर रहे हैं --batchऔर --pinentry-mode loopbackविकल्प किसी भी --passphrase के लिए आवश्यक ... विकल्प काम करने के लिए? V.2.1.18 को जानकारी पृष्ठ में बैच और पिनेंट्री के बारे में एक ही बात (लेकिन मैन पेज नहीं) की बात कही गई है, लेकिन फिर भी केवल - डिपेंट्री के साथ काम करता है ... यदि दोनों वास्तव में v.2.2.7 के लिए आवश्यक हैं तो चीजें हास्यास्पद हो रहे हैं, डेवलपर्स उद्देश्य पर गंभीर कीड़े शुरू कर रहे हैं
Xen2050

4

इसने मेरे लिए जादू की तरह काम किया:

echo "YOUR_PASS_PHRASE" | gpg --batch --yes  --passphrase-fd 0 /home/somewhere/your_file.pgp

त्रुटि: gpg: no valid OpenPGP data found. gpg: processing message failed: eof। कोई विचार?
गेब्रियल स्टेपल्स

3
read -sp "Enter passphrase: " pass
echo "${pass}" | gpg --batch --no-tty --yes --passphrase-fd 0 --symmetric -o /path/to/saved/file.jpg.gpg /path/to/file.jpg
echo "${pass}" | gpg --batch --no-tty --yes --passphrase-fd 0 --decrypt -o /path/to/decrypted/file.jpg /path/to/encrypted/file.jpg.gpg

2

क्या आपने करने की कोशिश की है:

gpg --batch --passphrase-fd 0 --decrypt-files *.gpg
gpg --passphrase-fd 0 1234 file.gpg 

स्रोत: यहाँ


1

मुझे लगता है कि कमांड लाइन के लिए पासवर्ड पास करने के लिए एक काफी सुरक्षित तरीका यह है:

gpg --passphrase-file <(echo password) --batch --output outfile -c file

यह क्या करेगा "इको" कमांड को स्पॉन करने के लिए और एक फाइल डिस्क्रिप्टर को gpg (जैसे / dev / fd / 63) के पथ नाम के रूप में पास करें। gpg फिर वहाँ से कुंजी पढ़ेगा। इस बीच में, गूंज कमांड समानांतर में चलना चाहिए और एफडी के बफर पर कुंजी को छोड़कर, तुरंत समाप्त होना चाहिए।

लाभ हैं:

  • Gpg कमांड का कमांड लाइन पर पासवर्ड नहीं होगा
  • गूँज कम होगी। वास्तव में, यह लगभग तत्काल होना चाहिए
  • पासवर्ड कभी भी डिस्क पर नहीं रहेगा, डिलीट होने के लिए कोई फ़ाइल नहीं होगी और यदि कमांड बाधित है तो कोई बचेगा नहीं

1

आपको विश्वास नहीं होगा जब मैं आपको बताता हूं कि ubuntu gpg पर आपका पासवर्ड पूछने की कोशिश करता है अगर $ DISPLAY सेट है और इसे कमांडलाइन --पासवर्ड से लेता है अगर आप इसे अनसेट करते हैं। यह उम्मीद के मुताबिक काम करता है:

DISPLAY=    gpg --symmetric --passphrase pass --batch

मुझे लगता है कि इंजीनियरिंग का सिर्फ एक और उदाहरण।


1

यहाँ स्टैकओवरफ़्लो उत्तर की एक कड़ी है जो शायद आगे की सहायता के लिए है; मेरे पास एक प्रोजेक्ट है जो थोक डिक्रिप्शन / एन्क्रिप्शन करता है, और GnuPG को पासफ़्रेज़ के बारे में बहुत सख्त होने के कारण , कठिन तरीका सीखा है जो केवल दुर्लभ अवसरों पर काम करता है। इसके बजाय विकल्प को अधिक विश्वसनीय होने पर विचार करें ।--passphrase--passphrase-fd

यह स्क्रिप्ट बनाता उचित के उपयोग के --passphrase -fdविकल्प, और के माध्यम से सार्वजनिक रूप से परीक्षण किया गया है ट्रैविस-सीआई जहां कार्रवाई में इसके बारे में लॉग पा सकते हैं।

अब मैं यहाँ कुछ उदाहरण कोड उपलब्ध कराए बिना उत्तर के लिंक पोस्ट नहीं कर रहा हूँ, इसलिए यहाँ एक अद्यतन "स्टैंड अलोन" स्क्रिप्ट है जिसे आप खेल सकते हैं:

#!/usr/bin/env bash
# Set some variables for easy modding
Var_fd='9'
Var_pass="/path/to/passphrase.file"
Var_gpg_opts="--passphrase-fd ${Var_fd} --decrypt"
Var_output_location="out.txt"
Arr_string=( "$@" )
# Open file descriptor and shove the passphrase file into it
if [ -f "${Var_pass}" ]; then
    exec ${Var_fd}<"${Var_pass}"
else
    exec ${Var_fd}<(echo "${Var_pass}")
fi
# Pipe input array though gpg and append to output file
cat <<<"${Arr_string[*]}" | $(which gpg) ${Var_gpg_opts} >> ${Var_output_location}
# Do not forget to close the file descriptor
exec ${Var_fd}>&-

जबकि ऊपर GitHub पर लिंक की रक्षा के रूप में फैंसी नहीं है, यह इस पोस्ट की शुरुआत में जुड़े उत्तर की तुलना में भी अधिक कार्यात्मक होना चाहिए

हैप्पी हैकिंग।


1

जैसा कि मैन gpg में बताया गया है निम्नलिखित विकल्प का उपयोग किया जा सकता है

-पेंट्री-मोड मोड पिनेंट्री मोड को मोड पर सेट करें। मोड के लिए अनुमत मान हैं:

          default
                 Use the default of the agent, which is ask.

          ask    Force the use of the Pinentry.

          cancel Emulate use of Pinentry's cancel button.

          error  Return a Pinentry error (``No Pinentry'').

          loopback
                 Redirect Pinentry queries to the caller.  Note that in contrast to Pinentry the user is not prompted again if he enters a bad password.

तो gpg का डिफ़ॉल्ट व्यवहार पासफ़्रेज़ के लिए उपयोगकर्ता को संकेत देना है, यदि यह उपयोगकर्ता एजेंट मोड को "--pinentry-mode लूपबैक" में बदल देता है तो यह पूरी तरह से ठीक है। पूरी आज्ञा

gpg --pinentry-mode loopback --passphrase <passphrase> -d <file to decrypt>

0

एक सरल विधि जो मैंने एक लिनक्स मशीन पर काम करते हुए पाया है: 1) gpg के लिए आयात कुंजी: => खोल> gpg -import Private_key.key

2) डिक्रिप्ट नाम देने वाला संगठन: => खोल> gpg -output -d

२.१) कमांड के ऊपर देने से आप पैराफेरेस में प्रवेश करेंगे। Paraphrase दर्ज करें और यह gpg फ़ाइल को डिक्रिप्ट करेगा।


0
gpg2 -se --passphrase yourpassword --batch --yes -r user@example.com filename

1
यह अच्छा होगा यदि आप समझा सकते हैं कि इस समस्या को क्यों ठीक किया जाना चाहिए
ज़ना

1
हालांकि यह कोड स्निपेट प्रश्न को हल कर सकता है, जिसमें स्पष्टीकरण सहित वास्तव में आपकी पोस्ट की गुणवत्ता में सुधार करने में मदद करता है। याद रखें कि आप भविष्य में पाठकों के लिए सवाल का जवाब दे रहे हैं, न कि केवल उस व्यक्ति से जो अब पूछ रहा है! कृपया स्पष्टीकरण जोड़ने के लिए अपना उत्तर संपादित करें, और इस बात का संकेत दें कि क्या सीमाएँ और मान्यताएँ लागू होती हैं।
टोबे स्पाइट

0

के अंत में रखें ~/.gnupg/gpg.conf:

use-agent
pinentry-mode loopback

(शायद नई) फ़ाइल के अंत में रखें ~/.gnupg/gpg-agent.conf:

allow-loopback-pinentry

और फिर इस कमांड को चलाएं:

echo RELOADAGENT | gpg-connect-agent

अब आप पासवर्ड पूछे बिना इसे चला सकते हैं:

echo "$1" | gpg2 --trust-model always --clearsign --batch --no-tty --quiet --no-verbose --yes -u $2 --digest-algo SHA512
--s2k-digest-algo SHA512 --passphrase "$3"

जहां $ 1 एन्क्रिप्टेड होने के लिए पाठ है, $ 2 उपयोगकर्ता आईडी और $ 3 पासवर्ड है।

नोट: मुझे याद नहीं है कि यह क्यों काम करता है, लेकिन यह काम करता है। यदि आप विवरण जानते हैं, तो कृपया यहां संपादित करें और डालें।

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