चेतावनी: संयुक्त निजी कुंजी फ़ाइल! जब अमेज़न EC2 इंस्टेंस में SSH की कोशिश कर रहा है


190

मैं पांडा को Amazon EC2 उदाहरण पर स्थापित करने के लिए काम कर रहा हूं। मैंने कल रात अपना खाता और उपकरण स्थापित किए और मुझे अपने स्वयं के व्यक्तिगत उदाहरण के साथ बातचीत करने के लिए SSH का उपयोग करने में कोई समस्या नहीं थी, लेकिन अभी मुझे पांडा के EC2 उदाहरण में अनुमति नहीं दी जा रही है। पांडा के साथ शुरुआत करना

मुझे निम्नलिखित त्रुटि मिल रही है:

@         WARNING: UNPROTECTED PRIVATE KEY FILE!          @

Permissions 0644 for '~/.ec2/id_rsa-gsg-keypair' are too open.
It is recommended that your private key files are NOT accessible by others.
This private key will be ignored.

मैंने कल रात अपने निजी उदाहरण में जाने के लिए अपनी कीपेयर को 600 तक चट कर दिया है, और लंबाई पर प्रयोग करके अनुमतियों को 0 पर सेट किया है और यहां तक ​​कि नई कुंजी स्ट्रिंग भी उत्पन्न कर रहा है, लेकिन कुछ भी काम नहीं कर रहा है।

सब पर कोई मदद एक बड़ी मदद होगी!


हम्म, ऐसा लगता है कि जब तक कि निर्देशिका पर अनुमतियाँ 777 पर सेट नहीं की जाती हैं, तब तक ec2- रन-इंस्टेंस स्क्रिप्ट मेरी कीफाइल्स को खोजने में असमर्थ है। मैं SSH में नया हूँ इसलिए मैं कुछ देख सकता हूँ।


ec2- रन-इंस्टेंस केवल एक कीपर नाम की आवश्यकता होनी चाहिए, जो कुछ ऐसा है जो अमेज़ॅन की तरफ रहता है। जब आप SSH में होते हैं, तो आपको केवल अपनी वास्तविक निजी कुंजी (डिस्क पर एक) का उपयोग करना चाहिए। आपको ec2-run-instances से क्या त्रुटि हो रही है?
user27619

2
इस सवाल के लिए भयानक शीर्षक।
माइकनरसन

2
@MikeNereson: इसे संपादित करने के लिए स्वतंत्र महसूस करें, यही कारण है कि हम चीजों को यहां बेहतर बनाते हैं
स्टु थॉम्पसन

क्या आप वाकई इसे 0600 (ऑक्टल) पर सेट कर रहे हैं, न कि 600 (दशमलव) पर?
हाइड

5
chmod 400 ~/.ssh/id_rsa संदर्भ: stackoverflow.com/a/9270753/2082569
atulkhatri

जवाबों:


210

मैंने कल रात अपनी निजी मिसाल पाने के लिए अपनी कीपेयर को 600 तक चट कर दिया है,

और इस तरह से यह माना जाता है।

से EC2 प्रलेखन हमारे पास "आप OpenSSH (या किसी भी यथोचित पागल SSH ग्राहक) का उपयोग कर रहे हैं तो आप शायद इस फ़ाइल की अनुमतियों को सेट करने इतना है कि यह केवल आपके द्वारा पठनीय होना चाहिए।" पांडा दस्तावेज़ आप अमेज़न के दस्तावेज़ों के लिंक से जोड़ते हैं, लेकिन वास्तव में यह बता नहीं है कि यह सब कितना महत्वपूर्ण है।

विचार यह है कि कुंजी जोड़ी फाइलें पासवर्ड की तरह होती हैं और इन्हें संरक्षित करने की आवश्यकता होती है। इसलिए, आपके द्वारा उपयोग किए जा रहे ssh क्लाइंट को उन फ़ाइलों को सुरक्षित रखने की आवश्यकता होती है और केवल आपका खाता ही उन्हें पढ़ सकता है।

निर्देशिका को 700 पर सेट करना वास्तव में पर्याप्त होना चाहिए, लेकिन जब तक फाइलें 600 हैं, तब तक 777 को नुकसान नहीं पहुंचेगा।

आपके पास जो भी समस्याएं हैं, वे क्लाइंट साइड हैं, इसलिए किसी भी अनुवर्ती प्रश्नों के साथ स्थानीय ओएस जानकारी शामिल करना सुनिश्चित करें!


3
मैं आज एक ऐसी स्थिति में आ गया, जहाँ मैं कुंजीपट को समूह-पठनीय होना चाहता था (व्यक्तिगत लॉगिन के लिए ssh का उपयोग नहीं कर रहा था, लेकिन किसी दूरस्थ सर्वर पर स्क्रिप्ट निष्पादित करने के लिए, इस उद्देश्य के लिए दूरस्थ सर्वर पर समर्पित उपयोगकर्ता, अधिकृत_कीप्स केवल इसलिए लॉक किए गए थे कहा स्क्रिप्ट चलेगा, और मूल सर्वर पर कई व्यक्तियों को स्क्रिप्ट चलाने के लिए पहुंच होनी चाहिए)। ओह ठीक है, मुझे लगता है कि साधारण वर्कअराउंड की प्रतियां ~ / .sh / में उन सभी उपयोगकर्ताओं के लिए है जिनके पास एक्सेस होना चाहिए - या सभी व्यक्तिगत कुंजियों के साथ अधिकृत_कीप्स को पॉप्युलेट करें।
तोबिकेन

@tobixen: आने वाले दो साल, लेकिन ... 'सही' वर्कअराउंड एक समर्पित उपयोगकर्ता में कुंजी रखने के लिए होगा, और समूह के उपयोगकर्ताओं को समर्पित उपयोगकर्ता के रूप में उस कमांड को चलाने के लिए उपयोग करने की अनुमति देगा।
स्टु थॉम्पसन

EC2 प्रलेखन के लिए @StuThompson लिंक मृत प्रतीत होता है। क्या आप अपडेट कर सकते हैं?
अनिकेत ठाकुर

मैं यह नहीं देख सकता कि आपके उत्तर में काम करने के लिए मैं क्या कर सकता हूँ, कृपया उत्तर दें :)
प्रतिक

@Pratik दोनों प्रमुख फ़ाइलों के लिए 600 और निर्देशिका के लिए 777 काम करना चाहिए।
जामो

55

सुनिश्चित करें कि निजी कुंजी फ़ाइलों वाली निर्देशिका 700 पर सेट है

chmod 700 ~/.ec2

कोई विशेष कारण कि आप फ़ाइल पर निष्पादन विशेषाधिकार क्यों चाहते हैं?
ज़ोल्टन

1
@ ज़ोल्टन यह एक निर्देशिका है, एक फ़ाइल नहीं है।
एवमोहन

मैं सिर्फ। Pem फ़ाइल पर इसका उपयोग करता था और यह मेरे लिए काम करता था।
CGTheLegend

30

इसे ठीक करने के लिए, 1) आपको डिफ़ॉल्ट पर वापस अनुमतियाँ रीसेट करनी होंगी:

sudo chmod 600 ~/.ssh/id_rsa sudo chmod 600 ~/.ssh/id_rsa.pub

यदि आपको एक और त्रुटि मिल रही है: क्या आप सुनिश्चित हैं कि आप कनेक्ट करना जारी रखना चाहते हैं (हां / नहीं)? हाँ होस्ट को होस्ट (/ home/geek/.ssh/ogn_hosts) की सूची में जोड़ने में विफल रहा।

2) इसका मतलब है कि उस फ़ाइल पर अनुमतियाँ भी गलत तरीके से सेट की गई हैं, और इसे इसके साथ समायोजित किया जा सकता है:

sudo chmod 644 ~/.ssh/known_hosts

3) अंत में, आपको निर्देशिका अनुमतियों को समायोजित करने की आवश्यकता हो सकती है:

sudo chmod 755 ~/.ssh

यह आपको वापस उठना और दौड़ना चाहिए।


17

निजी कुंजी फ़ाइल को संरक्षित किया जाना चाहिए। मेरे मामले में मैं लंबे समय से public_key प्रमाणीकरण का उपयोग कर रहा हूं और मैं निजी कुंजी और 644 (rw- r-- r--) और के लिए 600 (rw- --- ---) के रूप में अनुमति देता था .Ssh फ़ोल्डर में होम फ़ोल्डर में आपके पास 700 अनुमति होगी (आरडब्ल्यूएक्स --- ---)। इसे सेट करने के लिए यूजर के होम फोल्डर पर जाएं और निम्न कमांड चलाएँ


.Ssh फ़ोल्डर के लिए 700 अनुमति सेट करें

chmod 700 .ssh


निजी कुंजी फ़ाइल के लिए 600 अनुमति सेट करें

chmod 600 .ssh/id_rsa


सार्वजनिक कुंजी फ़ाइल के लिए 644 अनुमति सेट करें

chmod 644 .ssh/id_rsa.pub

8

मुझे भी यही मुद्दा मिला, लेकिन मैं अपनी कुंजी फ़ाइल की अनुमति को 600 में बदलकर इसे ठीक करता हूं।

sudo chmod 600 /path/to/my/key.pem

लिंक: http://stackabuse.com/how-to-fix-warning-unprotected-pStreet-key-file-on-mac-and-linux/


1
इसने मेरे मुद्दे को तय किया
राव

2

अपनी निजी कुंजी, सार्वजनिक कुंजी, ज्ञात_होस्ट को उसी निर्देशिका में रखें और नीचे दिए गए लॉगिन की कोशिश करें:

ssh -I(small i) "hi.pem" ec2-user@ec2-**-***-**-***.us-west-2.compute.amazonaws.com
  • अर्थ में एक ही निर्देशिका, cd /Users/prince/Desktop। अब lsकमांड टाइप करें और आपको देखना चाहिए **.pem **.ppk known_hosts

नोट: आपको उसी निर्देशिका से लॉगिन करने का प्रयास करना होगा या आपको अनुमति से इनकार कर दिया जाएगा क्योंकि यह आपकी वर्तमान निर्देशिका से .pem फ़ाइल नहीं मिल सकती है।


यदि आप किसी भी निर्देशिका से SSH में सक्षम होना चाहते हैं, तो आप निम्नलिखित को ~/.ssh/configफ़ाइल में जोड़ सकते हैं ...

Host your.server
HostName ec2-user@ec2-**-***-**-***.us-west-2.compute.amazonaws.com
User ec2-user
IdentityFile ~/.ec2/id_rsa-gsg-keypair
IdentitiesOnly yes

अब आप अपने सर्वर पर SSH कर सकते हैं, भले ही निर्देशिका केवल टाइप करके हो ssh your.server(या "होस्ट" के बाद आप जो भी नाम रखते हैं)।


1

विंडोज़ पर, गिट बैश का उपयोग करने का प्रयास करें और अपने लिनक्स कमांड का उपयोग करें। आसान तरीका

chmod 400 *****.pem

ssh -i "******.pem" ubuntu@ec2-11-111-111-111.us-east-2.compute.amazonaws.com

अगर WSL का उपयोग कर रहे हैं, तो सुनिश्चित करें कि आप pem फ़ाइल को एक लिनक्स फ़ोल्डर में कॉपी करें क्योंकि chmod / mnt dirs में प्रभावी नहीं होगा।
पाउलो मर्सन

1

Chmod कमांड का उपयोग करके फ़ाइल अनुमति बदलें

sudo chmod 700 keyfile.pem

0

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

इसलिए मुझे लगता है कि आप ec2-user के साथ ssh करने की कोशिश कर रहे होंगे, लेकिन मुझे याद है कि हाल ही में अधिकांश centos AMI उदाहरण के लिए, cent2 उपयोगकर्ता का उपयोग कर रहे हैं बजाय ec2-user के

इसलिए यदि आप ssh -i file.pem centos@public_IPकृपया मुझे बताएं कि आप सही उपयोगकर्ता नाम के साथ ssh करने के लिए प्रयास कर रहे हैं अन्यथा यह एक मजबूत कारण हो सकता है कि आप अपने ~ / .ssh / id_rsa या file.pem पर सही अनुमतियों के साथ भी ऐसे त्रुटि संदेश देखें।


0

इस पर ठोकर खाने वाले किसी भी व्यक्ति के लिए बस एक नोट:

यदि आप उदाहरण के लिए आपके साथ साझा की गई कुंजी के साथ SSH की कोशिश कर रहे हैं, तो:

ssh -i /path/to/keyfile.pem user@some-host

keyfile.pemआपके साथ साझा की गई निजी / सार्वजनिक कुंजी कहां है और आप इसे कनेक्ट करने के लिए उपयोग कर रहे हैं, सुनिश्चित करें कि आप इसे में सहेजते हैं ~/.ssh/और chmod 777

मेरी मशीन पर कहीं और सहेजे जाने पर फ़ाइल का उपयोग करने की कोशिश करना ओपी की त्रुटि थी। यकीन नहीं होता कि इसका सीधा संबंध है।


0

इसका हल केवल फ़ाइल के स्वामी द्वारा पठनीय बनाना है, अर्थात ऑक्टल मोड प्रतिनिधित्व के अंतिम दो अंक शून्य (जैसे मोड 0400) होना चाहिए ।

OpenSSH एक जाँच करता है authfile.c, जिसका नाम है sshkey_perm_ok:

/*
 * if a key owned by the user is accessed, then we check the
 * permissions of the file. if the key owned by a different user,
 * then we don't care.
 */
if ((st.st_uid == getuid()) && (st.st_mode & 077) != 0) {
    error("@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@");
    error("@         WARNING: UNPROTECTED PRIVATE KEY FILE!          @");
    error("@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@");
    error("Permissions 0%3.3o for '%s' are too open.",
        (u_int)st.st_mode & 0777, filename);
    error("It is required that your private key files are NOT accessible by others.");
    error("This private key will be ignored.");
    return SSH_ERR_KEY_BAD_PERMISSIONS;
}

टिप्पणी के बाद पहली पंक्ति देखें: यह फ़ाइल के मोड के खिलाफ "बिटवाइज़" करता है और पिछले दो ऑक्टल अंकों में सभी बिट्स का चयन करता है (चूंकि 07ऑक्टल है 0b111, जहां प्रत्येक बिट क्रमशः आर / डब्ल्यू / एक्स के लिए खड़ा है) ।

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