ssh-add -l
आपको उन सभी ssh-keys को दिखाता है, जिनके साथ जोड़ा गया है ssh-add ~/.ssh/id_yourkey
। मैं दूसरे शब्दों में gpg और gpg- एजेंट के साथ अनुरूप काम कैसे कर सकता हूं, इसे कैश्ड कुंजियों की सूची दिखाने के लिए कहें?
ssh-add -l
आपको उन सभी ssh-keys को दिखाता है, जिनके साथ जोड़ा गया है ssh-add ~/.ssh/id_yourkey
। मैं दूसरे शब्दों में gpg और gpg- एजेंट के साथ अनुरूप काम कैसे कर सकता हूं, इसे कैश्ड कुंजियों की सूची दिखाने के लिए कहें?
जवाबों:
आप ऐसा करने में सक्षम नहीं हो सकते हैं, कम से कम अभी तक नहीं, या कम से कम सामान्य मामले में नहीं। हालांकि, मैंने जो कुछ भी सीखा है उसे साझा करूंगा, और इस उत्तर को उचित समय पर अपडेट करने के लिए तत्पर हूं।
सबसे पहले, ssh-agent
क्षमता के विपरीत , जो वास्तव में निजी कुंजी gpg-agent
को कैश करता है , कुंजी या पासफ्रेज को कैश कर सकता है। यह प्रत्येक ग्राहक पर निर्भर है जो कैश करना चाहता है, और पासफ़्रेज़ को कैश करने के लिए gpg
उपयोग करता gpg-agent
है।
आप उपयोगिता gpg-agent
का उपयोग करके बातचीत कर सकते हैं gpg-connect-agent
। इसके बाद के उदाहरण में, मैं STDIN के माध्यम से एक समय में एक आदेश दे रहा हूं।
$ CACHEID="ThisIsTheTrickyPart"
$ ERRSTR="Error+string+goes+here"
$ PMTSTR="Prompt"
$ DESSTR="Description+string+goes+here"
$ echo "GET_PASSPHRASE --data $CACHEID $ERRSTR $PMTSTR $DESSTR" | gpg-connect-agent
D MyPassPhrase
OK
gpg-connect-agent
इस आदेश को लागू करने और पारित करने के बाद , pinentry
मेरे सिस्टम पर कॉन्फ़िगर किया गया कमांड पासफ़्रेज़ के लिए संकेत करने के लिए त्रुटि, संकेत और विवरण स्ट्रिंग्स का उपयोग करता है। इस मामले में मैंने "MyPassPhrase" में प्रवेश किया जो कि संरचित आउटपुट में वापस आ गया है (नीचे चित्र देखें) । अगर मैं भेज GET_PASSPHRASE
करने के लिए gpg-agent
एक ही साथ फिर से $CACHEID
, यह रिटर्न उपयोग करने के बजाए कूटशब्द कैश की गई pinentry
।
GET_PASSPHRASE
एक --no-ask
विकल्प को भी स्वीकार करता है जो कैश मिस पर त्रुटि लौटाएगा। यहां मैं कैश नोट के रूप में "नोटकैडिड" का उपयोग करता हूं, और आवश्यक तर्कों के लिए डमी स्ट्रिंग्स का उपयोग करता हूं जो उपयोग gpg-agent
नहीं करेंगे।
$ echo "GET_PASSPHRASE --no-ask NotCachedID Err Pmt Des" | gpg-connect-agent
ERR 67108922 No data <GPG Agent>
सिद्धांत रूप में, तब, आप एजेंट से प्रत्येक के लिए-कैश्ड पासफ़्रेज़ बदले में और आउटपुट में OK
या उसके लिए जाँच ERR
कर सकते हैं। प्रश्न तो यह हो जाता है कि मैं कैश आईडी कैसे उत्पन्न करूं? जैसा कि हम ऊपर उदाहरण में देखते हैं, gpg-agent
कैश आईडी के रूप में इसे स्वीकार करता है। यह पता चलता है कि gpg
सार्वजनिक कुंजी पर एक फिंगरप्रिंट की गणना होती है और कैश आईडी के रूप में एक हेक्स-कोडेड स्ट्रिंग प्रतिनिधित्व का उपयोग करता है, लेकिन परेशानी यह है कि यह फिंगरप्रिंट वैसा नहीं है जैसा कि आप फिंगरप्रिंट के माध्यम से सीख सकते हैंgpg --fingerprint --list-secret-keys
। इस डाइजेस्ट को कीग्रेप कहा जाता है (क्योंकि यह कच्चे कुंजी सामग्री पर ही गणना की जाती है जबकि फिंगरप्रिंट की गणना प्रमुख सामग्री और निर्माण टाइमस्टैम्प पर की जाती है)। यदि आप वास्तव में इस रास्ते को जारी रखना चाहते हैं, तो आपको यह पता लगाना होगा कि आप जिन कुंजियों की जांच करना चाहते हैं, उनमें से प्रत्येक के लिए सही फिंगरप्रिंट कैसे उत्पन्न करें (यह विकल्प के साथ, अगली पीढ़ी के GnuPG, 2.1 का उपयोग करना आसान होगा --with-keygrip
)।
चेतावनी:GET_PASSPHRASE
वास्तव में आउटपुट में स्पष्ट में पासफ़्रेज़ शामिल है । यहां तक कि अगर आप --data
विकल्प छोड़ देते हैं , तो पासफ़्रेज़ एक हेक्स-कोडेड स्ट्रिंग के रूप में स्पष्ट रूप से दिखाई देता है। जब तक आप यह नहीं जानते कि आप क्या कर रहे हैं, और उचित सावधानी बरतें, तो यह एक बहुत बुरा विचार है।
gpg-agent
, क्या यह है?
gpg-agent
pinentry
कार्यक्रम का जो भी स्वाद इसे उपयोग करने के लिए कॉन्फ़िगर किया गया है को आमंत्रित करता है। उदाहरण के लिए देखें कैसे करें कंसोल उपयोग मोड pinentry GPG मजबूर करने के लिए ... ।
gpg-2.1.11
उबंटू 14.04 पर स्रोत से संकलित का उपयोग करते हुए , मैं यह नहीं पता लगा सकता कि gpg-agent
कैश आईडी क्या है: मैंने दोनों कीग्रिप्स (मुख्य कुंजी और उपकुंजी) और कुंजी फिंगरप्रिंट की कोशिश की, जैसा कि दिखाया गया है gpg --fingerprint --with-keygrip <user>
। उनमें से कोई भी काम नहीं करता है, और gpg-connect-agent
हमेशा रिपोर्ट करता है ERR 67108922 No data <GPG Agent>
। मैंने डबल चेक किया कि GPG_TTY= gpg --decrypt <file>
विभिन्न कैश आईडी को आज़माने के बाद एजेंट के पास अभी भी सफलतापूर्वक पासफ़्रेज़ है । (यदि यह अस्पष्ट है, तो परेशान होने से GPG_TTY
, डिक्रिप्शन केवल तभी सफल होता है, जब पासफ़्रेज़ पहले से ही कैश हो gpg-agent
।)
GnuPG (2.2.9 के साथ परीक्षण) के बाद के संस्करणों पर यह भी keygrips है कि वर्तमान में आदेश का उपयोग कर एजेंट द्वारा कैश कर रहे हैं की सूची के लिए संभव है keyinfo --list
के साथ gpg-connect-agent
।
$ gpg-connect-agent 'keyinfo --list' /bye
S KEYINFO 866C3DE249CF81E31A3691845DBADE2809487FF5 D - - 1 P - - -
S KEYINFO 04278155E72CAE8FF1548FE161F1B8F7673824F4 D - - - P - - -
OK
1
सातवें स्तंभ में इंगित करता है कि keygrip कैश किया गया है। एक कीग्रेप और कुंजी के बीच का जुड़ाव इसके साथ पुनः प्राप्त किया जा सकता है gpg --list-secret-keys --with-keygrip
।
स्रोत: https://demu.red/blog/2016/06/how-to-check-if-your-gpg-key-is-in-cache/
--fingerprint
उदाहरण के लिए, आपको दो बार उल्लेख करने की जरूरत है :
$ gpg --fingerprint --fingerprint ftpadmin@kernel.org
pub 1024D/517D0F0E 2000-10-10
Key fingerprint = C75D C40A 11D7 AF88 9981 ED5B C86B A06A 517D 0F0E
uid Linux Kernel Archives Verification Key <ftpadmin@kernel.org>
sub 4096g/E50A8F2A 2000-10-10
Key fingerprint = E851 4C25 10C6 0291 0D47 A008 7C8B 4360 E50A 8F2A
इस मामले में कैशिड होगा E8514C2510C602910D47A0087C8B4360E50A8F2A
।
--fingerprint
बनाम दो --fingerprint --fingerprint
दोनों एक ही समान आउटपुट लौटाते हैं। जैसा कि @BenCreasy लिखता है, उपरोक्त उत्तर कुंजीग्रिप कार्यों का उपयोग करता है।
http://lists.gnupg.org/pipermail/gnupg-users/2010-January/037876.html
कैशिड कुंजी का पूर्ण फिंगरप्रिंट है।
gpg --fingerprint user@foo.bar