मैं SSH निजी कुंजी से सार्वजनिक कुंजी कैसे प्राप्त करूं?


444

एक SSH निजी कुंजी के रूप ssh-keygenमें एक सार्वजनिक कुंजी भाग होता है। मैं इस सार्वजनिक कुंजी को निजी कुंजी से कैसे पुनः प्राप्त करूं? मैंने अपनी सार्वजनिक कुंजी खो दी है और इस सार्वजनिक कुंजी की सामग्री को सर्वर authorized_keysफ़ाइल में डालने की आवश्यकता है और एक नई कुंजी जोड़ी नहीं बनाना चाहता।

वैकल्पिक रूप से प्रकाशित: मैं id_rsa.pubफ़ाइल से फ़ाइल कैसे बनाऊँ id_rsa?


pbcopy > ~/.ssh/id_rsa.pubउफ़।
निक टी

@NickT - pbcopy एक MacOSX कमांड है। साथ ही, यदि आपने रिबूट, लॉग आउट, या क्लिपबोर्ड में कुछ और कॉपी किया है तो यह बेकार है।
jsnfwlr

जवाबों:


681

मुझे सर्वर फाल्ट पर उत्तर मिला है: निजी कुंजी से एक सार्वजनिक एसएसएच कुंजी बनाएं?

विकल्प -yसार्वजनिक कुंजी को आउटपुट करता है:

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

साइड नोट के रूप में, सार्वजनिक कुंजी की टिप्पणी खो गई है। मेरे पास एक साइट है जिसमें टिप्पणी (लॉन्चपैड?) की आवश्यकता थी, इसलिए आपको ~/.ssh/id_rsa.pubटिप्पणी और कुंजी डेटा के बीच की जगह के साथ पहली पंक्ति में एक टिप्पणी को संपादित करने और संलग्न करने की आवश्यकता है । एक उदाहरण सार्वजनिक कुंजी को नीचे दिखाया गया है।

ssh-rsa AAAA..../VqDjtS5 ubuntu@ubuntu

SSH एजेंट में जोड़े गए कुंजियों के लिए (एक प्रोग्राम जो पृष्ठभूमि में चलता है और बार-बार कीफाइल पासफ़्रेज़ में पुन: प्रवेश करने की आवश्यकता से बचता है), आप उन ssh-add -Lकुंजियों के लिए सार्वजनिक कुंजी सूचीबद्ध करने के लिए कमांड का उपयोग कर सकते हैं जिन्हें इसमें जोड़ा गया था एजेंट (के माध्यम से ssh-add -l)। यह तब उपयोगी होता है जब SSH कुंजी को स्मार्ट कार्ड पर संग्रहीत किया जाता है (और निजी कुंजी फ़ाइल तक पहुंच संभव नहीं है)।


1
कृपया ध्यान दें कि आपकी निजी कुंजी फ़ाइल ~/.ssh/id_rsaआपके उपयोगकर्ता नाम तक ही सीमित होनी चाहिए। $ sudo chmod 600 ~/.ssh/id_rsaइसे प्रतिबंधित करने के लिए अपनी रूट क्रेडेंशियल्स का उपयोग करें और दर्ज करें, फिर आप सार्वजनिक कुंजी फ़ाइल को आउटपुट कर सकते हैं। अन्यथा आपको अप्रतिबंधित निजी कुंजी फ़ाइल चेतावनी मिलेगी।
मार्क मिकोफ़्स्की

12
@MarkMikofski के लिए कोई ज़रूरत नहीं है sudo, आप पहले से ही निजी कुंजी के मालिक हैं। अन्यथा आप इसे पहली जगह में नहीं पढ़ सकते हैं।
लेकेनस्टाइन

7
@ Lekensteyn धन्यवाद, निश्चित रूप से आप सही हैं! इसके अलावा 400सिफारिश की है निजी कुंजी फ़ाइल टाइप करने के लिए लिखने के लिए कोई ज़रूरत नहीं के बाद से। सही कमांड होना चाहिए$ chmod 400 ~/.ssh/id_rsa
मार्क मिकोफ़्स्की

निजी कुंजी टिप्पणी खो गई है। देखें stackoverflow.com/questions/38290929/...
weberjn

1
@weberjn निजी कुंजी ( id_rsaफ़ाइल) में कोई टिप्पणी नहीं है, लेकिन वास्तव में सार्वजनिक कुंजी फ़ाइल ( id_rsa.pub) के भीतर की टिप्पणी खो गई है।
लेकेन्स्टाइन

14

यह विशेष रूप से उन उपयोगकर्ताओं के लिए है जो विंडोज का उपयोग कर एसएसएच को अपनी दूरस्थ मशीनों में शामिल करते हैं, जिसमें अमेज़ॅन एडब्ल्यूएस और जीसीई पर क्लाउड चित्र शामिल हैं।

(अस्वीकरण)

मैंने हाल ही में जीसीई पर नए तैनात वीएम छवियों को दूरस्थ लॉग इन करने के लिए इस समाधान का उपयोग किया।


उपकरणों का इस्तेमाल:

  1. puttygen
  2. WinSCP

प्रदर्शन करने के लिए कदम:

  1. पोटीगेन का उपयोग करके एक सार्वजनिक / निजी कुंजी जोड़ी बनाएं।
  2. क्लाउड या दूरस्थ स्थान पर अपने सर्वर पर एक सार्वजनिक कुंजी अपलोड करें।

विवरण (इसे कैसे करना है):

  1. एक कुंजी / जोड़ी बनाएं या मौजूदा निजी कुंजी का उपयोग करें:

    यदि आपके पास एक निजी कुंजी है:

    Puttygen खोलें, लोड बटन दबाएँ और अपनी निजी कुंजी (* .pem) फ़ाइल चुनें।

    यदि आपके पास निजी कुंजी नहीं है:

    • पुट्टीजेन खोलें,
    • वांछित कुंजी प्रकार SSH2 DSA का चयन करें (आप RSA या DSA का उपयोग कर सकते हैं) पैरामीटर सेक्शन के भीतर ... और यह महत्वपूर्ण है कि आप पासफ़्रेज़ फ़ील्ड को खाली छोड़ दें,
    • प्रेस (जन / निजी) कुंजी जोड़ी बनाने के लिए निर्देशों का पालन करें और पालन करें।

    नमूना कुंजी पीढ़ी चित्र

  2. एक नई 'अधिकृत_की' फ़ाइल बनाएँ (नोटपैड के साथ):

    "सार्वजनिक कुंजी को OpenSSH अधिकृत_की फाइल में चिपकाने के लिए सार्वजनिक कुंजी" से कॉपी करें, पुट्टी कुंजी जनरेटर के अनुभाग में, और कुंजी डेटा को "अधिकृत_की" फाइल में पेस्ट करें।

    सुनिश्चित करें कि इस फ़ाइल में पाठ की केवल एक पंक्ति है।

  3. लिनक्स सर्वर पर कुंजी अपलोड करें:

    • WinSCP खोलें,
    • SFTP फ़ाइल प्रोटोकॉल का चयन करें और अपने SSH क्रेडेंशियल्स के साथ लॉग इन करें।
    • सफलता मिलने पर, आप अपने रिमोट मशीन में होम डायरेक्टरी स्ट्रक्चर को देखते हैं।

    दूरस्थ मशीन पर होम निर्देशिका में अधिकृत_कील्स फ़ाइल अपलोड करें।

  4. उचित अनुमतियाँ सेट करें:

    एक .sshनिर्देशिका बनाएं (यदि यह मौजूद नहीं है)

    authorized_keysफ़ाइल को .ssh निर्देशिका में कॉपी करें (यह किसी भी मौजूदा authorized_keysफ़ाइल को बदल देगा ; इस पर ध्यान दें)।

    यदि फ़ाइल मौजूद है, तो इस फ़ाइल की सामग्री को मौजूदा फ़ाइल में जोड़ें।

    अनुमतियाँ सेट करने के लिए आदेश चलाएँ:

    sudo chmod 700 .ssh && chmod 600 .ssh/authorized_keys
    

अब आप हर बार क्रेडेंशियल दर्ज किए बिना एक रिमोट मशीन में ssh कर पाएंगे।

आगे की पढाई:

  1. विंडोज के तहत SSH कुंजियों को बनाना और अपलोड करना

  2. OpenSSH कुंजी, प्रमाणपत्र .pem और .pub का उपयोग करके पासवर्ड के बिना प्रमाणीकरण


यदि आपकी होम निर्देशिका संलग्‍न है, तो यह करें: askubuntu.com/questions/439184/…
devprashant

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