Amazon AWS से सार्वजनिक कुंजी कैसे डाउनलोड करें?


25

मेरे पास एक कीपेयर (p1) के साथ चलने वाला amazon ec2 linux इंस्टेंस है और मैंने निजी कुंजी को अपने होम डेस्कटॉप पर डाउनलोड किया है। अब काम पर, मैंने अपने कार्य डेस्कटॉप पर एक कीपर (P2) बनाया और सार्वजनिक कुंजी को AWS कंसोल के माध्यम से अमेज़न पर आयात किया।

घर पर, मैं authorized_keysअपने AMI उदाहरण (जिसे मैं वर्तमान में केवल घर से ही एक्सेस कर सकता हूं) में जोड़ा जा सकता है । हालाँकि, मैं अपने साथ P2 की सार्वजनिक कुंजी लाना भूल गया, इसलिए क्या यह संभव है कि इस सार्वजनिक कुंजी को Amazon से निर्यात किया जाए।

जवाबों:


6

अच्छी पहेली, धन्यवाद! यहाँ एक जवाब है:

  1. एक नया, अस्थायी EBS बूट t1.micro उदाहरण A शुरू करें, जो कि कीयर P2 को निर्दिष्ट करता है। उपलब्धता क्षेत्र निर्दिष्ट करें जहां आपके पास एक और उदाहरण बी पहले से ही चल रहा है और जिस पर आपकी पहुंच है। (यदि आवश्यक हो तो एक अस्थायी शुरू करें)।

  2. रोकें (समाप्त न करें) उदाहरण ए के बाद यह कुछ मिनटों के लिए चलने की स्थिति में है, इसलिए इसके पास अपनी अधिकृत_की फाइल के लिए सार्वजनिक कुंजी को सहेजने का मौका है।

  3. रूके हुए उदाहरण ए से रूट EBS वॉल्यूम को अलग करें। संलग्न करें और इसे अपने चलने वाले उदाहरण B पर माउंट करें।

  4. माउंट की गई फ़ाइल सिस्टम से सार्वजनिक कुंजी की प्रतिलिपि बनाएँ।

  5. ईबीएस वॉल्यूम को अलग करें और हटाएं। अस्थायी उदाहरण A को समाप्त करें।


1
यह सुनिश्चित नहीं है कि यह वास्तव में मूल प्रश्न को कैसे हल करता है ... यह निश्चित रूप से एडब्ल्यूएस ईसी 2 उदाहरणों से निपटने का एक तरीका है अगर और केवल अगर आप ईबीएस समर्थित इंस्टेंस का उपयोग कर रहे हैं।
जेरेमी बाउस

आपको उस EBS बूट इंस्टेंसेस का उपयोग करने की आवश्यकता नहीं है, जब तक कि आप इसे सार्वजनिक रूप से बंद करने के लिए अस्थायी आवृत्ति नहीं चलाते। आप जो करना चाहते हैं, वह सार्वजनिक कुंजी है जो यह दृष्टिकोण करता है।
एरिक हैमंड

1
यदि आपके पास निजी कुंजी है, तो आप ऐसे उपायों से गुजरे बिना सार्वजनिक कुंजी को पुनः प्राप्त कर सकते हैं।
जेरेमी बोस

2
जेरेमी: मूल प्रश्न के आधार पर, निजी कुंजी अपने कार्यालय में वापस आ जाती है जहां वह नहीं मिल सकता है। और एक बार जब वह कार्यालय में वापस आ जाता है, तो वह EC2 उदाहरण में नहीं जा सकता क्योंकि उसके पास उस कार्यालय की निजी कुंजी के लिए सार्वजनिक कुंजी नहीं है। इसलिए वह अमेज़न से सार्वजनिक कुंजी प्राप्त करना चाहता है, और ऐसा करने का एकमात्र तरीका उस सार्वजनिक कुंजी के साथ एक उदाहरण शुरू करना है। फिर आपको उस उदाहरण से सार्वजनिक कुंजी प्राप्त करनी होगी जो कि मुश्किल हिस्सा है।
एरिक हैमंड

1
वाह! जनता की कुंजी पाने के लिए बहुत से काम। अमेज़ॅन के लिए "निर्यात सार्वजनिक कुंजी" विकल्प रखना आसान होता।
जुस १२

37

हालांकि सही ssh-keygen कमांड है:

ssh-keygen -y -f /path/to/privatekey > /path/to/publickey

यह पिछले उत्तर पर एक टिप्पणी या प्रस्तावित संपादन होना चाहिए। हालांकि आप सही हैं।
20

आप सही हैं यह एक टिप्पणी होनी चाहिए थी। दुर्भाग्य से, मैंने अभी तक टिप्पणी करने के लिए विशेषाधिकार अर्जित नहीं किए हैं :-(
rsmoorthy

हाहा, अच्छा तुम वहाँ जाओ। सुधार के साथ में चीमिंग के लिए धन्यवाद।
जेकोटन

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

1
चलाने chmod 400 your_private_key.pemअगर तुम मिल "अनुमतियां भी खुला त्रुटि रहे हैं"
crizCraig

7

मैंने पहले से ही एक उत्तर दिया था, जो ssh सार्वजनिक कुंजी पर प्राप्त करने के लिए EBS वॉल्यूम का उपयोग करता है, लेकिन यहां एक और तरीका है कि आप एक अस्थायी EC2 उदाहरण को उपयोगकर्ता-डेटा स्क्रिप्ट के साथ शुरू करके प्राप्त कर सकते हैं जो सार्वजनिक कुंजी को कंसोल आउटपुट में भेजता है। यहाँ कदम हैं:

निम्न कोड को output-ssh-key.userdataअपने स्थानीय कंप्यूटर पर नामित फ़ाइल में सहेजें । इन कमोडों को कम मत करो!

#!/bin/bash -ex
exec> >(tee /var/log/user-data.log|logger -t user -s 2>/dev/console) 2>&1
adminkey=$(GET instance-data/latest/meta-data/public-keys/ | 
  perl -ne 'print $1 if /^0=[^a-z0-9]*([-.@\w]*)/i')
cat <<EOF
SSHKEY:========================================================================
SSHKEY:HERE IS YOUR PUBLIC SSH KEY FOR KEYPAIR "$adminkey":
SSHKEY:$(cat /home/ubuntu/.ssh/authorized_keys)
SSHKEY:========================================================================
SSHKEY:Halting in 50min ($(date --date='+50 minutes' +"%Y-%m-%d %H:%M UTC"))
EOF
sleep 3000
halt

उपयोगकर्ता डेटा स्क्रिप्ट के रूप में उपरोक्त फ़ाइल के साथ एक स्टॉक उबंटू 10.04 एलटीएस उदाहरण चलाएं। उस कुंजीपट को निर्दिष्ट करें जिसके लिए आप सार्वजनिक ssh कुंजी प्राप्त करना चाहते हैं:

ec2-run-instances \
  --key YOURKEYPAIRHERE \
  --instance-type t1.micro \
  --instance-initiated-shutdown-behavior terminate \
  --user-data-file output-ssh-key.userdata \
  ami-ab36fbc2

जब तक यह आपकी सार्वजनिक ssh कुंजी नहीं दिखाता है, तब तक कंसोल आउटपुट का अनुरोध करते रहें। रन-इंस्टेंस कमांड से लौटाए गए उदाहरण आईडी को निर्दिष्ट करें:

ec2-get-console-output YOURINSTANCEID | grep SSHKEY: | cut -f3- -d:

2-10 मिनट के भीतर आपको इस तरह आउटपुट मिलेगा:

========================================================================
HERE IS YOUR PUBLIC SSH KEY FOR KEYPAIR "erich":
ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEA6rn8cl41CkzaH4ZBhczOJZaR4xBBDI1Kelc2ivzVvCB
THcdJRWpDd5I5hY5W9qke9Tm4fH3KaUVndlcP0ORGvS3PAL4lTpkS4D4goMEFrwMO8BG0NoE8sf2U/7g
aUkdcrDC7jzKYdwleRCI3uibNXiSdeG6RotClAAp7pMflDVp5WjjECDZ+8Jzs2wasdTwQYPhiWSiNcfb
fS97QdtROf0AcoPWElZAgmabaDFBlvvzcqxQRjNp/zbpkFHZBSKp+Sm4+WsRuLu6TDe9lb2Ps0xvBp1F
THlJRUVKP2yeZbVioKnOsXcjLfoJ9TEL7EMnPYinBMIE3kAYw3FzZZFeX3Q== erich
========================================================================
Halting in 50min (2011-12-20 05:58 UTC)

अस्थायी उदाहरण एक घंटे के भीतर स्वचालित रूप से समाप्त हो जाएगा, लेकिन यदि आप यह सुनिश्चित करना चाहते हैं कि आपको दो सेंट से अधिक शुल्क नहीं देना है, तो इसे चलाने के लिए खर्च करना होगा।


मैंने अर्सकली की आधुनिक स्थापना के साथ यह कोशिश की, और इसने आपके उपयोगकर्ता-डेटा स्क्रिप्ट के साथ काम किया। हालाँकि मुझे आज्ञाओं को थोड़ा अनुकूलित करना पड़ा। यह यूरोप-पश्चिम -1 क्षेत्र के लिए काम करता है: aws ec2 रन-इंस्टेंस --key-name mykey --instance-type t1.micro --instance- आरंभ-शटडाउन-व्यवहार समाप्त --user-data फ़ाइल: // output- ssh-key.userdata --image-id ami-c1167eb8; aws ec2 get -sole-output --instance-id i-0ce56c0e02086160d; aws ec2 टर्मिनेट-इंस्टेंस - आइंस्टीन-आईडी i-0ce56c0e02086160d
होल्ब

(संपादित) ठीक है स्वरूपण यहाँ भयानक है, मैं अलग उत्तर के रूप में पोस्ट करूँगा।
बर्नहार्ड

5

यदि आपके पास निजी SSH कुंजी है तो आप निम्नलिखित ssh-keygen कमांड चलाकर सार्वजनिक कुंजी घटक को फिर से जनरेट कर सकते हैं :

 ssh-keygen -i -f /path/to/private-key > /path/to/public-key

यह बहुत सरल हिस्सा है ... AWS कंसोल और API एक EC2 उदाहरण शुरू करते समय 2 कीपियों को आगे बढ़ाने का समर्थन नहीं करता है। यह सिस्टम व्यवस्थापक द्वारा अन्य माध्यमों से करने के लिए छोड़ दिया गया एक अभ्यास है।

यदि आपके पास पहले से अधिकृत पहचान की पहुंच है, तो आप बस निम्नलिखित ssh-copy-id कमांड कर सकते हैं:

 ssh-copy-id -i /path/to/public-key user@EC2-instance

यह दी गई सार्वजनिक कुंजी को सर्वर में और ~user/.ssh/authorized_keysआपके लिए फ़ाइल में स्वचालित रूप से कॉपी कर देगा और फ़ाइल पर उचित अनुमति सुनिश्चित करेगा।

अधिक सुंदर तरीका आपके कॉन्फ़िगरेशन प्रबंधन प्रक्रियाओं में अतिरिक्त पहचान कुंजियों को शामिल करना होगा। मेरे मामले में यह नोड के लिए कठपुतली विन्यास में अतिरिक्त कुंजी जोड़ने पर जोर देता है।

एक साइड नोट के रूप में, व्यक्तिगत प्राथमिकता लेकिन काम और घर के स्थान के लिए अलग-अलग कुंजियों को शामिल करने की तुलना में बेहतर SSH कुंजी प्रबंधन पद्धति का उपयोग करेगा। जैसा कि मैंने पिछले प्रश्न में उल्लेख किया था कि मैं एक USB ड्राइव पर अपनी कुंजी बनाए रखता हूं जिसे मैं अपने द्वारा उपयोग किए जाने वाले किसी भी कंप्यूटर के बजाय अपने पास रखता हूं।


0

एक अन्य विकल्प user_data में एक छोटी स्क्रिप्ट जोड़ना होगा जो रूट में एक और ssh कुंजी जोड़ता है:

#!/bin/bash

touch ~/.ssh/authorized_keys
chmod 400 ~/.ssh/authorized_keys

echo "<KEY>" >> ~/.ssh/authorized_keys

फिर आप मशीन को रूट के रूप में लॉग इन कर सकते हैं ssh -l root -i <KEYFILE> URLऔर उपयोगकर्ता ec2_user, ubuntu या हालांकि इसे कहा जाता है के अधिकृत_की से कुंजी पढ़ सकते हैं।

केवल एक चीज - आपको मशीन को सार्वजनिक रूप से पहुंच योग्य बनाने की आवश्यकता है, और सुनिश्चित करें कि पोर्ट 22 तक पहुंच बाहर से संभव है।

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