मैं अधिकृत_की फ़ाइल में SSH कीज़ को कैसे जोड़ूँ?


185

अमेज़ॅन ईसी 2 पर मेरे पास एक उबंटू सर्वर है, जिसका उपयोग मैं विकास के लिए करता हूं, और आज मैंने अपनी ~/.ssh/authorized_keysफाइल से सब कुछ मूर्खतापूर्वक हटा दिया । सौभाग्य से मेरे पास एक एसएसएच खुला है, इसलिए मैं अभी भी जुड़ा हुआ हूं, और फ़ाइल को ठीक कर सकता हूं, लेकिन जब मैं अपनी कुंजी फ़ाइल को वापस रखने की कोशिश करता हूं, तो यह काम नहीं करता है। मुझे अभी भी अपनी स्थानीय मशीन पर सर्वर से अनुमति प्राप्त है।

authorized_keysअनुमतियाँ 600 है। मैंने ssh-rsa के साथ अपनी SSH कुंजी को जोड़ने और ssh-rsa को छोड़ने की कोशिश की है। मैंने SSH कुंजी को सभी एक पंक्ति बनाने की भी कोशिश की, लेकिन यह भी काम नहीं किया।

क्या कुछ और है जो मुझे करना है जैसे फ़ाइल को कुछ फिर से लोड करना है?


3
वर्षों बाद, यह -स्टील प्रासंगिक और सक्रिय लगता है; केवल एक अवलोकन करना चाहते थे, एक बुलेट को चकमा देने के बारे में बात करते थे: "सौभाग्य से मेरे पास एक एसएसएच खुला है, इसलिए मैं अभी भी जुड़ा हुआ हूं [..] - शीश! ; डीपी
नास्त्रोमोव

1
मेरे जन्मदिन पर संपादित की गई इस पोस्ट ने मुझे दो महीने पहले मेरे जन्मदिन पर बचाया था।
ytpillai

जवाबों:


198

आपको सर्वर पर शुरू होने वाली सामग्री के साथ फ़ाइल को कभी नहीं सहेजना चाहिए -----BEGIN RSA PRIVATE KEY-----, यह आपकी निजी कुंजी है। इसके बजाय, आपको सार्वजनिक कुंजी को ~/.ssh/authorized_keysफ़ाइल में रखना होगा ।

इस सार्वजनिक कुंजी का .pubविस्तार तब होता है जब ssh-keygenइसका उपयोग किया जाता है और इसकी सामग्री शुरू होती है ssh-rsa AAAAB3। ( इस प्रश्न के उत्तर में द्विआधारी प्रारूप का वर्णन किया गया है )।

~/.sshसर्वर पर अनुमतियाँ 700 होनी चाहिए। फ़ाइल ~/.ssh/authorized_keys(सर्वर पर) में 600 का मोड होना चाहिए। क्लाइंट-साइड पर (निजी) कुंजी की अनुमतियाँ 600 होनी चाहिए।

यदि निजी कुंजी को पासवर्ड से संरक्षित नहीं किया गया था, और आपने इसे सर्वर पर रखा है, तो मैं आपको एक नया जनरेट करने की सलाह देता हूं:

ssh-keygen -t rsa

आप इसे छोड़ सकते हैं यदि आप पूरी तरह से सुनिश्चित हैं कि कोई भी सर्वर से हटाए गए निजी कुंजी को पुनर्प्राप्त नहीं कर सकता है।

यदि यह मदद नहीं करता है, तो sshअधिक वाचालता के लिए विकल्पों के साथ दौड़ें :

ssh -vvv user@example.com

सर्वर की ओर, आप /var/log/auth.logविवरण के लिए समीक्षा कर सकते हैं ।


1
अमेज़ॅन EC2 सर्वर के साथ मुझे मिलने वाली सभी निजी कुंजी (key.pem) है। मेरे पास कहीं भी सार्वजनिक कुंजी नहीं है।
डेव लॉन्ग

3
@ लॉन्ग लॉन्ग: आपको एक नई कुंजी का उपयोग करना होगा ssh-keygen -t rsaऔर अपने सर्वर पर नई बनाई गई id_rsa.pubफ़ाइल डालनी होगी ~/.ssh/authorized_keys। यह भी देखें docs.amazonwebservices.com/AWSEC2/latest/UserGuide/...
Lekensteyn

15
@DaveLong: आप किसी भी समय निजी कुंजी से सार्वजनिक कुंजी उत्पन्न कर सकते हैं। आप इसे निम्न आदेश के साथ कर सकते हैं: ssh-keygen -y -f key.pem > key.pub
मॉर्गन ब्लैकथोर्न

5
@MorganBlackthorne जबकि यह सच है, मैं दूरस्थ स्रोतों से किसी एक को स्वीकार करने के बजाय आपकी निजी कुंजी बनाने की सलाह दूंगा। आप पूरी तरह से सुनिश्चित नहीं हो सकते कि निजी कुंजी लीक नहीं हुई।
लेकेनस्टाइन

2
@ गरत फिक्स्ड।
लेकेनस्टाइन

175

रिमोट मशीन में अपनी सार्वजनिक कुंजी स्थापित करने का एक वैकल्पिक तरीका authorized_keys:

cat ~/.ssh/id_rsa.pub | ssh USER@HOST "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys"

कुछ फायदे:

  • ssh-copy-idस्थापित करने की आवश्यकता नहीं है ।

  • गारंटी देता है कि mkdirकरने के लिए प्रयास करने से पहले काम करता id_rsa.pubहै authorized_keys


10
आपके जवाब ने मुझे बिना किसी अतिरिक्त पैकेज के कई दूरस्थ मशीनों पर ऐसा करने में मदद की, धन्यवाद।
nol

यह गारंटी नहीं देता है कि "~ / .ssh" निर्देशिका और "~ / .ssh / अधिकृत_कीप्स" फ़ाइल सही अनुमतियों के साथ बनाई जाएगी।
निक

1
@ अच्छा, मुझे वह समस्या थी। तो शायद एक को वास्तव में पहले अपने अस्तित्व की जांच करनी चाहिए, अगर लापता ठीक से chmod (700 / फ़ोल्डर, 600 / फ़ाइल) के साथ बनाते हैं, और उसके बाद ही जोड़ते हैं? तो शायद यह एक लाइनर नहीं हो सकता है?
ऐनीएजाइल

7
@AnneTheAgile मुझे लगता है कि mkdir -p ~/.ssh@MariusButuc द्वारा दिए गए उत्तर के भाग को बदलने के लिए umask 077 && mkdir -p ~/.sshआपको यह सुनिश्चित करने की आवश्यकता है कि यह ठीक से काम करेगा।
निक

1
ty @ निक! मैं उसे जाने दूंगा।
ऐनीएजाइल

128

यदि आपके पास लॉगिन आधारित प्रमाणीकरण है, तो ssh-copy-idअपनी सार्वजनिक कुंजियों को दूरस्थ सर्वर पर जोड़ने के लिए उपयोग करें।

ssh-copy-id user@host

1
यह मैक पर एक मान्य कमांड नहीं लगता है, जो कि मेरी क्लाइंट मशीन है।
डेव लॉन्ग


13
OSX पर आप काढ़ा के साथ स्थापित कर सकते हैं:brew install ssh-copy-id
दर्शन

Macports पर, इस कमांड का उपयोग करके इंस्टॉल किया जा सकता है sudo port install openssh +ssh_copy_id+ssh_copy_idSsh_copy_id प्रकार के साथ अधिभारित स्थापित करता है।
स्टेफान लासिवस्की

6
ध्यान दें कि phildawson.tumblr.com पर दिए गए निर्देश आपको रूट के रूप में अविश्वसनीय सॉफ़्टवेयर स्थापित करने के लिए कहते हैं। यह काफी खतरनाक है और हैक होने का एक अच्छा तरीका है, जब तक कि आप नहीं जानते कि आप लेखक पर भरोसा कर सकते हैं।
स्टीफन लासिवस्की

38
local> scp .ssh/id_dsa.pub remote.com:
local> ssh remote.com
remote> cat id_dsa.pub >> .ssh/authorized_keys
remote> rm id_dsa.pub
remote> exit

16

सबसे आसान तरीका कॉपी और पेस्ट करना है ...

पहले id_rsa.pub"ssh-rsa" सहित अपने स्थानीय सार्वजनिक कुंजी की सामग्री को तब तक देखें / कॉपी करें जब तक कि वह आपके ईमेल पते के साथ समाप्त न हो जाए:

cat ~/.ssh/id_rsa.pub

फिर authorized_keysसर्वर पर संपादित करें और उस फ़ाइल में किसी भी अन्य कुंजी के नीचे अपने क्लिपबोर्ड की सामग्री पेस्ट करें:

nano ~/.ssh/authorized_keys

और सहेजें Ctl+O, फ़ाइल Ctl+Xसे बाहर निकलें, SSH सत्र से बाहर निकलें exitऔर काम करने की पुष्टि करने के लिए वापस लॉगिंग का प्रयास करें। अगर यह एक पासवर्ड के लिए नहीं पूछा यह काम किया।


5

मुझे लगा कि मैं इसमें योगदान कर सकता हूं क्योंकि यह विशेष रूप से एडब्ल्यूएस उदाहरणों के बारे में है और सभी उत्तर केवल समस्या को लिनक्स मुद्दे के रूप में मानते हैं, जैसे कि यह हार्डवेयर का एक टुकड़ा था। पहली बात जो आपको समझनी चाहिए वह यह है कि आप कभी भी, कभी भी, EC2 उदाहरणों को हार्डवेयर की तरह न समझें। यह सिर्फ आपके लिए अधिक काम पैदा करने वाला है, उन्हें अस्थिर मानें। यही सबसे बड़ी बाधा है जिसे मैं लोगों को AWS के साथ देखता हूं। अपने उदाहरण का एक एएमआई बनाएं और नए उदाहरण में आपको जिस कुंजी की आवश्यकता है उसे इंजेक्ट करें। क्लाउड-इनिट आपके लिए इसका ख्याल रखेगा। अधिक जानकारी के लिए आपको मूल की AMI से नई आवृत्ति बनाते समय सही सार्वजनिक कुंजी का उपयोग करना होगा। यदि, स्वीकृत उत्तर की टिप्पणियों की तरह आप अपनी खुद की कुंजी जोड़ी पीएम और पेम फ़ाइलों को उत्पन्न करना चाहते हैं, तो एडब्ल्यूएस आपको EC2 में उपयोग के लिए अपनी सार्वजनिक कुंजी अपलोड करने का विकल्प प्रदान करता है।

http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-key-pairs.html#how-to-generate-your-own-key-and-import-it-to-aws


3

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


1
मुझे यह अच्छा लगेगा अगर विंडोज़ कंसोल में सभी ssh फंक्शनलिटी हो सकती है जो कि दुभाषिया में जोड़ी गई है
डेनिस

2

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

mkdir -p ~/.ssh && chmod 700 ~/.ssh && touch ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys && echo "ssh-rsa KEYGOESHERE user@remotehost or note" >> ~/.ssh/authorized_keys

1

यहाँ एक भिन्नता है जिसके कारण आपके पास एक टेक्स्ट फ़ाइल में सार्वजनिक कुंजी फ़ाइलनामों की सूची हो सकती है और सार्वजनिक कुंजी फ़ाइलों का बड़ा बैच भी उसी निर्देशिका में होता है।

यदि आप सार्वजनिक कुंजी फ़ाइलों को आयात करने के लिए एक बड़ी सूची दे रहे हैं तो यह विविधता सहायक हो सकती है :-)

$ for i in $(cat ListOfPubKeyFiles.txt) ; do cat $i | ssh User@Hostname "cat >> ~/.ssh/authorized_keys"; done
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.