key_load_public: अमान्य प्रारूप


99

मैंने पासफ़्रेज़ के साथ 4096 बिट RSA-2 कुंजी उत्पन्न करने के लिए PuTTY कुंजी जनरेटर का उपयोग किया।

मैं .ppk और एक ओपनएसएसएल प्रारूप सार्वजनिक कुंजी सहेजता हूं। पोटीन प्रारूप सार्वजनिक कुंजी काम नहीं करती है।

किसी भी स्थिति में, मेरी त्रुटि इस प्रकार है:

$ ssh -T git@github.com
key_load_public: invalid format
Enter passphrase for key '/c/Users/Dan/.ssh/id_rsa':
Hi Dan! You've successfully authenticated, but GitHub does not provide shell access.

मुद्दा क्या है?

मैं चाबियाँ लोड करने के लिए पेजेंट का उपयोग करता हूं और मैं ssh कनेक्शन की कोशिश करने के लिए गिट बैश का उपयोग करता हूं। मैंने GitHub में भी कुंजी लोड की है, मुझे यकीन नहीं है कि मैं क्या गलत कर रहा हूं।

मैंने एक नई लाइन जोड़ने और GitHub में एक नई लाइन जोड़ने की कोशिश की है


आपको क्यों लगता है कि यह काम नहीं करता है? यह सफलतापूर्वक प्रमाणित कहता है
रोलैंड स्मिथ

2
@ रोलैंडस्मिथ यह मुझे key_load_public: invalid formatसही बता रहा है क्योंकि मैं पासफ़्रेज़ दर्ज करने से पहले कमांड निष्पादित करता हूं?
जॉर्डनजीएस

1
Do: 'ssh -vvv -T git@github.com' अधिक जानकारी प्राप्त करने के लिए, शायद ~ / .ssh / ज्ञात_होस्ट बुरा है - ssh github की सार्वजनिक कुंजी की तलाश में है। कुंजी फ़ाइल के प्रारूप का पता लगाने के लिए आप 'फाइल की' चला सकते हैं।
मॉस

जवाबों:


183

जैसा कि रोलांड ने अपने उत्तर में उल्लेख किया है, यह एक चेतावनी है कि ssh-agentसार्वजनिक कुंजी के प्रारूप को नहीं समझता है और तब भी, सार्वजनिक कुंजी का स्थानीय रूप से उपयोग नहीं किया जाएगा।

हालाँकि, मैं यह भी विस्तृत और उत्तर दे सकता हूं कि चेतावनी क्यों है। यह केवल इस तथ्य पर उबलता है कि पुटी कुंजी जनरेटर दो अलग-अलग सार्वजनिक कुंजी प्रारूप उत्पन्न करता है जो आप कार्यक्रम में करते हैं।

नोट: मेरे स्पष्टीकरण के दौरान, मैं जिन महत्वपूर्ण फाइलों का उपयोग / निर्माण कर रहा हूं, उनका नाम id_rsaउनके उपयुक्त एक्सटेंशन के साथ दिया जाएगा । इसके अलावा, कॉपी-पेस्ट सुविधा के लिए, कुंजी के मूल फ़ोल्डर को मान लिया जाएगा ~/.ssh/। अपनी आवश्यकताओं के अनुरूप इन विवरणों को समायोजित करें।

प्रारूप

प्रासंगिक PuTTY प्रलेखन से लिंक करें

SSH-2

जब आप "सार्वजनिक कुंजी सहेजें" बटन का उपयोग करके PuTTY कुंजी जेनरेटर का उपयोग करके एक कुंजी को सहेजते हैं , तो इसे RFC 4716 द्वारा परिभाषित प्रारूप में सहेजा जाएगा ।

उदाहरण:

---- BEGIN SSH2 PUBLIC KEY ----
Comment: "github-example-key"
AAAAB3NzaC1yc2EAAAABJQAAAQEAhl/CNy9wI1GVdiHAJQV0CkHnMEqW7+Si9WYF
i2fSBrsGcmqeb5EwgnhmTcPgtM5ptGBjUZR84nxjZ8SPmnLDiDyHDPIsmwLBHxcp
pY0fhRSGtWL5fT8DGm9EfXaO1QN8c31VU/IkD8niWA6NmHNE1qEqpph3DznVzIm3
oMrongEjGw7sDP48ZTZp2saYVAKEEuGC1YYcQ1g20yESzo7aP70ZeHmQqI9nTyEA
ip3mL20+qHNsHfW8hJAchaUN8CwNQABJaOozYijiIUgdbtSTMRDYPi7fjhgB3bA9
tBjh7cOyuU/c4M4D6o2mAVYdLAWMBkSoLG8Oel6TCcfpO/nElw==
---- END SSH2 PUBLIC KEY ----

अधिभारित

आम धारणा के विपरीत, यह प्रारूप जनरेटर द्वारा सहेजा नहीं जाता है। हालाँकि यह "ओपनएसएसएच अधिकृत_की फ़ाइल में चिपकाने के लिए सार्वजनिक कुंजी" शीर्षक वाले टेक्स्ट बॉक्स में उत्पन्न और दिखाया गया है। इसे एक फ़ाइल के रूप में सहेजने के लिए, आपको इसे टेक्स्ट बॉक्स से मैन्युअल रूप से कॉपी करना होगा और इसे एक नई टेक्स्ट फाइल में पेस्ट करना होगा।

ऊपर दिखाई गई कुंजी के लिए, यह होगा:

ssh-rsa AAAAB3NzaC1yc2EAAAABJQAAAQEAhl/CNy9wI1GVdiHAJQV0CkHnMEqW7+Si9WYFi2fSBrsGcmqeb5EwgnhmTcPgtM5ptGBjUZR84nxjZ8SPmnLDiDyHDPIsmwLBHxcppY0fhRSGtWL5fT8DGm9EfXaO1QN8c31VU/IkD8niWA6NmHNE1qEqpph3DznVzIm3oMrongEjGw7sDP48ZTZp2saYVAKEEuGC1YYcQ1g20yESzo7aP70ZeHmQqI9nTyEAip3mL20+qHNsHfW8hJAchaUN8CwNQABJaOozYijiIUgdbtSTMRDYPi7fjhgB3bA9tBjh7cOyuU/c4M4D6o2mAVYdLAWMBkSoLG8Oel6TCcfpO/nElw== github-example-key

कुंजी का प्रारूप बस है ssh-rsa <signature> <comment>और SSH-2 स्वरूपित फ़ाइल को पुन: व्यवस्थित करके बनाया जा सकता है।

सार्वजनिक कुंजी को पुनर्जीवित करना

यदि आप इसका उपयोग कर रहे हैं ssh-agent, तो आप की भी पहुँच संभव होगी ssh-keygen

यदि आपके पास आपकी OpenSSH निजी कुंजी ( id_rsaफ़ाइल) है, तो आप OpenSSH सार्वजनिक कुंजी फ़ाइल का उपयोग करके उत्पन्न कर सकते हैं:

ssh-keygen -f ~/.ssh/id_rsa -y > ~/.ssh/id_rsa.pub

यदि आपके पास केवल PUTTY Private Key ( id_rsa.ppkफाइल) है, तो आपको इसे पहले बदलना होगा।

  1. PuTTY कुंजी जेनरेटर खोलें
  2. मेनू बार पर, "फ़ाइल"> "निजी कुंजी लोड करें" पर क्लिक करें
  3. अपनी id_rsa.ppkफ़ाइल का चयन करें
  4. मेनू बार पर, "रूपांतरण"> "ओपन ओपनएसएसएच कुंजी" पर क्लिक करें
  5. फ़ाइल को id_rsaएक एक्सटेंशन के रूप में सहेजें ()

अब जब आपके पास एक OpenSSH निजी कुंजी है, तो आप कुंजी ssh-keygenपर जोड़तोड़ करने के लिए उपरोक्त टूल का उपयोग कर सकते हैं ।

बोनस: PKCS # 1 PEM- एन्कोडेड सार्वजनिक कुंजी प्रारूप

ईमानदार होने के लिए, मुझे नहीं पता कि इस कुंजी का उपयोग किस लिए किया जाता है क्योंकि मुझे इसकी आवश्यकता नहीं है। लेकिन मेरे पास मेरे नोटों में यह है कि मैं वर्षों से टकरा रहा हूं और मैं इसे पूर्णता के लिए यहां शामिल करूंगा। फ़ाइल इस तरह दिखाई देगी:

-----BEGIN RSA PUBLIC KEY-----
MIIBCAKCAQEAhl/CNy9wI1GVdiHAJQV0CkHnMEqW7+Si9WYFi2fSBrsGcmqeb5Ew
gnhmTcPgtM5ptGBjUZR84nxjZ8SPmnLDiDyHDPIsmwLBHxcppY0fhRSGtWL5fT8D
Gm9EfXaO1QN8c31VU/IkD8niWA6NmHNE1qEqpph3DznVzIm3oMrongEjGw7sDP48
ZTZp2saYVAKEEuGC1YYcQ1g20yESzo7aP70ZeHmQqI9nTyEAip3mL20+qHNsHfW8
hJAchaUN8CwNQABJaOozYijiIUgdbtSTMRDYPi7fjhgB3bA9tBjh7cOyuU/c4M4D
6o2mAVYdLAWMBkSoLG8Oel6TCcfpO/nElwIBJQ==
-----END RSA PUBLIC KEY-----

इस फ़ाइल को एक ओपनएसएसएच निजी कुंजी का उपयोग करके उत्पन्न किया जा सकता है (जैसा कि ऊपर "पुनर्जनन सार्वजनिक कुंजी" में उत्पन्न होता है):

ssh-keygen -f ~/.ssh/id_rsa -y -e -m pem > ~/.ssh/id_rsa.pem

वैकल्पिक रूप से, आप एक OpenSSH सार्वजनिक कुंजी का उपयोग कर सकते हैं:

ssh-keygen -f ~/.ssh/id_rsa.pub -e -m pem > ~/.ssh/id_rsa.pem

संदर्भ:


जब आप अपनी निजी कुंजी को एक ओपनएसएसएच कुंजी में परिवर्तित करते हैं, तो यह मेरी राय में है कि फाइल को विस्तार रहित छोड़ने की सलाह दी जाती है और बेहतर नहीं है। जब कोई एक्सटेंशन निजी कुंजी के लिए उपयोग किया जाता है, तो मेरा गिट-क्लाइंट दूरस्थ रिपॉजिटरी से कनेक्ट नहीं होगा।
प्रोग्रामर

@ Programmer1994 रूपांतरण निर्देश .ppkएक .pubफ़ाइल में परिवर्तित करने के चरणों के रूप में शामिल किए गए थे । id_rsaवास्तव में एक अन्य कार्यक्रम द्वारा उपयोग किए जा रहे मध्यस्थ निजी कुंजी के साइड इफेक्ट की अनदेखी की गई थी। मैंने किसी अस्पष्टता को दूर करने के लिए भाषा को "अधिमानतः विस्तार रहित" से "(बिना विस्तार के)" में बदल दिया है। जब भी मैं इस उत्तर को देखता हूं, मैं कुछ शिकायतों को हल करने का मौका लेता हूं। आपके सहयोग के लिए धन्यवाद।
samthecodingman

जवाब के लिए धन्यवाद। मैंने आपके उत्तर "रीजनिंग पब्लिक कीज़" के अनुभाग में कमांड का उपयोग किया और इसने मेरी समस्या को हल किया।
desmond13

आपने सार्वजनिक कुंजी के बारे में बात की। लेकिन समस्या एक निजी कुंजी id_rsa से उत्पन्न होती है। मुझे एक ही चेतावनी मिलती है जब मैं ssh के माध्यम से git सर्वर तक पहुंचने का प्रयास करते समय अपनी निजी ssh कुंजी का उपयोग करता हूं।
१biz:

5
ssh-keygen -f ~/.ssh/id_rsa -y > ~/.ssh/id_rsa.pubयह हल हो गया। धन्यवाद!
द्विज

16

यदि आप पुट्टीजेन टूल को स्थापित और उपयोग कर सकते हैं तो एक सरल उपाय है। नीचे चरण हैं। आपके पास निजी कुंजी का पासफ़्रेज़ होना चाहिए।

चरण 1: नवीनतम puttygen डाउनलोड करें और puttygen खोलें

चरण 2: अपनी मौजूदा निजी कुंजी फ़ाइल लोड करें, छवि के नीचे देखें

किसी मौजूदा निजी कुंजी को लोड करें

चरण 3: यदि पूछा जाए और ठीक मारा जाए तो कुंजी के लिए पासफ़्रेज़ दर्ज करें

paasphrase दर्ज करें

चरण 4: जैसा कि नीचे की छवि में दिखाया गया है "रूपांतरण" मेनू टैब का चयन करें और "निर्यात ओपनएसएसएच कुंजी" चुनें

OpenSSH फ़ाइल सहेजें

पसंदीदा स्थान पर नई निजी कुंजी फ़ाइल सहेजें और तदनुसार उपयोग करें।


2
मुझे load pubkey invalid formatचेतावनी मिली , जब मैंने निर्यात OpenSSH कुंजी के साथ कुंजी का निर्यात किया । निर्यात OpenSSH कुंजी (नए फ़ाइल स्वरूप को लागू करें) का उपयोग करते समय यह चला गया ।
एल्सामुको

लिनक्स में, apt install putty-toolsया yum install puttyफिरsudo puttygen private.ppk -O private-openssh-new -o private.pem
टाइप करें नोवेल

9

TL; DR: यह भी सुनिश्चित करें कि आपका id_rsa.pubascii / UTF-8 में है।

मुझे एक ही समस्या थी, हालांकि अकेले स्वीकार किए गए उत्तर ने पाठ एन्कोडिंग के कारण काम नहीं किया, जो एक अतिरिक्त, आसान-टू-मिस मुद्दा था।

जब मैं दौड़ता हूं

ssh-keygen -f ~/.ssh/id_rsa -y > ~/.ssh/id_rsa.pub

Windows PowerShell में, यह UTF-16 LE BOM एन्कोडिंग id_rsa.pubमें आउटपुट बचाता है , UTF-8 में नहीं । यह पॉवरशेल के कुछ इंस्टॉलेशन की एक संपत्ति है, जिसमें बिना किसी बॉम के UTF-8 में एक फाइल लिखने के लिए पॉवरशेल का उपयोग करने पर चर्चा की गई थी । स्पष्ट रूप से, OpenSSH पूर्व पाठ एन्कोडिंग को नहीं पहचानता है और एक समान त्रुटि उत्पन्न करता है:

key_load_public: invalid format

ssh-keygen -f ~/.ssh/id_rsa -yटेक्स्ट एडिटर के आउटपुट को कॉपी और पेस्ट करना, इसे हल करने का सबसे सरल तरीका है।

PS यह स्वीकार किए गए उत्तर के अतिरिक्त हो सकता है , लेकिन मेरे पास अभी तक यहां टिप्पणी करने के लिए पर्याप्त कर्म नहीं हैं।


1
जैसा कि आपने पाया, पॉवर्स में पाइपिंग अलग तरीके से काम करता है। आप ssh-keygen -f ~/.ssh/id_rsa -y | ac ~/.ssh/id_rsa.pubइसके बजाय उपयोग करेंगे ।
12 अक्टूबर को samthecodingman

7

यदि आप क्लिपबोर्ड के साथ अपनी सार्वजनिक कुंजी कॉपी करते हैं और इसे चिपकाते हैं, तो ऐसा हो सकता है कि सार्वजनिक कुंजी स्ट्रिंग को तोड़ा जा सकता है जिसमें नई-पंक्ति शामिल है।

सुनिश्चित करें कि आपकी सार्वजनिक कुंजी स्ट्रिंग एक पंक्ति के रूप में बनाई गई है।


5

ऐसा लगता है कि sshआपकी सार्वजनिक कुंजी को पढ़ा नहीं जा सकता है। लेकिन इससे कोई फर्क नहीं पड़ता।

आप अपनी सार्वजनिक कुंजी को github पर अपलोड करते हैं , लेकिन आप अपनी निजी कुंजी का उपयोग करके प्रमाणित करते हैं । उदाहरण के लिए FILES अनुभाग देखें ssh(1)


2
संक्षेप में, पोटीन कुंजी जीन पर जाएं, रूपांतरण पर क्लिक करें -> ssh कुंजी खोलें और id_rsa पर सहेजें - सुनिश्चित करें कि आपका गृह env चर आपके द्वारा देख रहे .ssh फ़ोल्डर की ओर इशारा कर रहा है, अपने सिस्टम से id_sa फ़ाइल की अन्य सभी प्रतियों को हटा दें।
कल्पेश सोनी

2

सीधे निजी कुंजी को सहेजने के बजाय वार्तालाप और निर्यात SSh कुंजी पर जाएं। एक ही मुद्दा था और यह मेरे लिए काम किया


2

त्रुटि भ्रामक है - यह pubkeyएक निजी कुंजी फ़ाइल की ओर इशारा करते हुए " " कहती है ~/.ssh/id_rsa

मेरे मामले में, यह बस एक लापता सार्वजनिक कुंजी थी (जैसा कि मैंने इसे तिजोरी से बहाल नहीं किया है)।


विवरण

मैं ~/.ssh/id_rsa.pubस्वचालित स्क्रिप्ट द्वारा तैनाती को छोड़ देता था ।

सभी sshusages ने काम किया, लेकिन त्रुटि ने मुझे एक संभावित गड़बड़ी के बारे में सोचा।

बिल्कुल नहीं - straceयह नोटिस करने में मदद की कि ट्रिगर वास्तव में *.pubफाइल थी:

strace ssh example.com
...
openat(AT_FDCWD, "/home/uvsmtid/.ssh/id_rsa.pub", O_RDONLY) = -1 ENOENT (No such file or directory)
...
write(2, "load pubkey \"/home/uvsmtid/.ssh/"..., 57) = 57
load pubkey "/home/uvsmtid/.ssh/id_rsa": invalid format

1

मेरी वही चेतावनी थी। यह बहुत पुरानी कुंजी थी। मैंने वर्तमान ओपनएसएसएच 7 पर एक कुंजी पुनः प्राप्त की, और त्रुटि चली गई।


0

इसलिए, अद्यतन के बाद मेरे पास एक ही मुद्दा था। मैं PEM का उपयोग key_fileविस्तार के बिना कर रहा था और बस .pemअपने मुद्दे को जोड़ रहा था । अब फाइल है key_file.pem


0

यदि आप अगस्त SS के साथ अंतर्निहित SSH के साथ विंडोज 10 का उपयोग कर रहे हैं, तो यह केवल ed25519 कुंजी का समर्थन करता है। आप मिल जाएगा key_load_public: invalid formatअगर आप RSA कुंजी जैसे उपयोग त्रुटि।

इस GitHub मुद्दे के अनुसार इसे 2020 में कुछ समय के लिए विंडोज अपडेट के माध्यम से तय किया जाना चाहिए। इसलिए एक समाधान यह है कि केवल अपडेट के लिए जहाज की प्रतीक्षा करें।

यदि आप प्रतीक्षा नहीं कर सकते हैं, तो एक नई एड 25519 कुंजी बनाने के लिए एक वैकल्पिक हल है, जो वैसे भी अच्छी सलाह है

> ssh-keygen -o -a 100 -t ed25519

आप इसका उपयोग जीथब के साथ कर सकते हैं, लेकिन कुछ पुराने सिस्टम इस नए प्रारूप का समर्थन नहीं कर सकते हैं।

अपनी कुंजी बनाने के बाद, यदि आप नीचे दी गई सुविधाओं में से किसी एक का उपयोग कर रहे हैं, तो उन्हें अपडेट करना न भूलें!

  1. ~\.ssh\config अभी भी पुरानी कुंजी को इंगित कर सकते हैं।
  2. ssh-addकमांड के माध्यम से ssh-Agent के लिए नई कुंजी जोड़ें
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.