सवाल मैं एसएसएच कैसे स्थापित करूं ताकि मुझे अपना पासवर्ड टाइप न करना पड़े?


मैं एसएसएच कैसे स्थापित करूं ताकि मेजबान से कनेक्ट होने पर मुझे अपना पासवर्ड टाइप न करना पड़े?


137
2017-07-18 16:51


मूल


कोई तर्क दे सकता है कि ऐसी चाबियों का उपयोग करने के लिए पासवर्ड की आवश्यकता नहीं है। इससे बचने के लिए कि जो कोई भी आपकी निजी कुंजी पकड़ लेता है, वह वास्तव में इसका दुरुपयोग कर सकता है, कोई भी अपने पासवर्ड से कुंजी की रक्षा कर सकता है। बेशक, कोई उस पासवर्ड को खाली छोड़ सकता है, लेकिन ऐसे कई मामले हैं जहां इसकी अनुशंसा नहीं की जाएगी। - Arjan
नवीनतम एसएसएच के साथ नवीनतम सिगविन पर, मुझे फिर से संकेत दिया जा रहा था क्योंकि मुझे अपने लिए बदलाव करने की आवश्यकता थी ~/.ssh/config अब यह आवश्यक है PubkeyAcceptedKeyTypes ssh-rsa*,ssh-dss* - HDave


जवाब:


एक एसएसएच कुंजी उत्पन्न करें (यदि आपके पास कोई नहीं है)

यदि आप गनोम का उपयोग करते हैं, तो समुद्री घोड़े एप्लिकेशन ("पासवर्ड और एन्क्रिप्शन कुंजी") आपके लिए यह कर सकता है: फ़ाइल -> नया -> सुरक्षित शेल कुंजी

यदि आप टर्मिनल पसंद करते हैं, तो चलाएं ssh-keygen -t <प्रकार> एक कीपैयर उत्पन्न करने के लिए। मान्य कीपैयर प्रकार हैं:

  • आरएसए: डिफ़ॉल्ट
  • डीएसए: 1024 बिट कुंजी तक सीमित को छोड़कर, अधिक या कम समकक्ष
  • ecdsa: छोटी चाबियों के साथ एक ही सुरक्षा, लेकिन अपेक्षाकृत नई और कुछ हद तक एसएसएच सॉफ्टवेयर में दुर्लभ है।
  • ed25519: उच्च सुरक्षा (साइड चैनल हमलों और कमजोर यादृच्छिक संख्या जेनरेटर के लिए अधिक प्रतिरोधी)। बहुत तेजी से हस्ताक्षर पीढ़ी। बहुत नया। केवल उपलब्ध है ओपनएसएसएच = = 6.5

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

रिमोट सर्वर पर सार्वजनिक कुंजी अपलोड करें

फिर, समुद्री घोड़े अक्सर आपके लिए यह कर सकते हैं - में मेरी व्यक्तिगत कुंजी, अपनी एसएसएच कुंजी पर राइट-क्लिक करें और चुनें सुरक्षित खोल के लिए कुंजी कॉन्फ़िगर करें

या, ssh-copy-id -i ~/.ssh/id_rsa.pub remote-user@remote-host टर्मिनल में

या, पूरी तरह मैन्युअल रूप से चरण-दर-चरण:

  1. एक निर्देशिका बनाएं (यदि यह पहले से मौजूद नहीं है) नाम दिया गया है .ssh रिमोट होस्ट पर दूरस्थ उपयोगकर्ता की होम निर्देशिका में।
  2. उस निर्देशिका में, नाम की एक फाइल बनाएँ authorized_keys (यदि यह पहले से मौजूद नहीं है)।
  3. अगर आपके रिमोट में है umask सामान्य से अधिक उदार है, फ़ाइल को समूह-लिखने योग्य नहीं बनाते हैं: chmod go-w ~/.ssh ~/.ssh/authorized_keys
  4. अंत में, किसी भी तरह से अपने स्थानीय की सामग्री कॉपी (संलग्न) सार्वजनिक कुंजी (~/.ssh/id_rsa.pub) रिमोट में ~/.ssh/authorized_keys फ़ाइल।

एसएसएच एजेंट में कुंजी लोड करें

यदि आप अपनी निजी कुंजी को एसएसएच में लोड करते हैं एजेंट, यह स्मृति में डिक्रिप्ट कुंजी रखेगा। जब भी हम सर्वर में खोलते हैं, हम चाहते हैं कि हम पासवर्ड को पुनः दर्ज करने से बचें।

सबसे पहले, एजेंट शुरू किया जाना चाहिए या लॉन्च संचार सॉकेट का पथ एक चर में लोड किया जाना चाहिए। चल रहा है ssh-एजेंट टर्मिनल पर एजेंट वैरिएबल को असाइन करने और सेट करने के लिए कमांड उत्पन्न होंगे। इन आदेशों को एक अलग टर्मिनल में उपयोग के लिए फ़ाइल में सहेजा जा सकता है। वैकल्पिक रूप से, कोई इन आदेशों को चला सकता है और उसी टर्मिनल को उसी टर्मिनल में फिर से उपयोग करने के बारे में भूल सकता है। उदाहरण के लिए: eval $(ssh-agent)

कुंजी लोड करना निष्पादन का एक साधारण मामला है ssh-add और इसे पास वाक्यांश दे रहा है।

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

पासवर्ड के बिना रिमोट सर्वर में शैल

अगर सब कुछ सही ढंग से किया गया था, का उपयोग कर ssh उपयोगकर्ता @ सर्वरआपको पासवर्ड के लिए संकेत नहीं देगा। अगर एजेंट के साथ कुछ गलत है और कुंजी नहीं है, तो आपको कुंजी के लिए पास वाक्यांश टाइप करने के लिए कहा जाएगा, न कि उपयोगकर्ता खाते के लिए पासवर्ड।

संचार के लिए एसएसएच का उपयोग करने वाली कोई भी चीज़ एजेंट में सही कुंजी लोड होने पर उपयोगकर्ता खाता पासवर्ड दर्ज किए बिना काम करेगी। जैसे कार्यक्रम SCP, SFTP तथा rsync इसका उपयोग करें।


टिप्पणियाँ:

  • आपको केवल एक एसएसएचवी 2 कुंजी की आवश्यकता है, क्योंकि एसएसएचवी 1 बहुत असुरक्षित है और अब अप्रयुक्त है।
  • आपको केवल एक प्रकार की कुंजी की आवश्यकता होती है - या तो आरएसए या डीएसए पर्याप्त है। (ed25519 और ईसीडीएसए हाल ही में दोनों हैं और इस प्रकार हर जगह समर्थित नहीं हैं)।
  • ये सभी कदम आरएसए और डीएसए कुंजी दोनों के लिए समान हैं। यदि आप डीएसए का उपयोग करते हैं, तो इसका उपयोग करें id_dsa के बजाय id_rsa, और ईसीडीएसए होगा id_ecdsa
  • 3.0 से पुराने पुराने ओपनएसएसएच सर्वर authorized_keys2 - लेकिन यह वास्तव में असंभव है कि आप 5.0 से अधिक पुराने उपयोग में पाएंगे।
  • ये निर्देश केवल ओपनएसएसएच संस्करण 3.0 और नए के लिए आवेदन करते हैं। lsh, ssh.com, और अन्य (यूनिक्स और नहीं) एसएसएच सर्वर इस ट्यूटोरियल में शामिल नहीं हैं।

उदाहरण:

  • रिमोट होस्ट पर सार्वजनिक कुंजी की प्रतिलिपि बनाना:

    ssh-copy-id -i ~ / .ssh / id_rsa.pub myaccount @ remotehost # यह
    
    बिल्ली ~ / .ssh / id_rsa.pub | ssh myaccount @ remotehost \
          'mkdir -p ~ / .ssh; बिल्ली >> ~ / .ssh / अधिकृत_की '# या यह
    
  • पुन: उपयोग के लिए एजेंट चर को सहेजना (विस्तृत उदाहरण)
    एसएसएच एजेंट> ~ /। एसएसएच / क्रॉस-टर्मिनल-एजेंट
    । ~ / .Ssh / पार टर्मिनल-एजेंट
    

153



आह, आपको "ssh-add {path-to-private-key-file}" कहना है और फिर यह आपको आपके पासफ़्रेज़ के लिए पूछेगा। कृपया इसे अपनी पोस्ट में अधिक स्पष्ट बनाएं। आपको "चौथा, रन एसएसएच" भी जोड़ना चाहिए। इस सामान के साथ दस्तावेज़ीकरण के साथ समस्या का एक हिस्सा यह है कि यह स्पष्ट रूप से स्पष्ट कदमों पर चमकता है जो प्रक्रिया के लिए नए व्यक्ति के लिए स्पष्ट नहीं हैं, जिन्हें पता नहीं है कि क्या हो रहा है और ये प्रोग्राम एक साथ कैसे काम करते हैं। - Jason S
जेसन: ssh-add -l यह जांचना है कि कोई एजेंट चल रहा है या नहीं। तर्क के बिना ssh-add डिफ़ॉल्ट स्थान से कुंजी जोड़ देगा (जो ~ / .ssh / id_rsa है)। वैसे भी, अद्यतन। - grawity
एक आदेश है ssh-copy-id जो लक्ष्य कुंजी पर सार्वजनिक कुंजी की प्रतिलिपि बनाता है और स्वचालित रूप से अनुमतियां सेट करता है। - hasen
बहुत बढ़िया जवाब! यह महत्वपूर्ण फाइलों की फ़ाइल अनुमतियों के बारे में कुछ याद नहीं कर रहा है - मुझे आज उससे संबंधित समस्या थी। निजी कुंजी फ़ाइल केवल मेरे द्वारा सुलभ होनी चाहिए, और सार्वजनिक कुंजी फ़ाइल केवल मेरे द्वारा लिखित होनी चाहिए। - ripper234
एक लाइन: ssh-keygen -f ~/.ssh/id_rsa -N "";ssh-copy-id -i ~/.ssh/id_rsa username@server-ip-or-address (बस प्रतिस्थापित करें username@server-ip-or-address)। - totymedli


आपने यह निर्दिष्ट नहीं किया कि यूनिक्स आप किस पर हैं, आप किस यूनिक्स से कनेक्ट कर रहे हैं, आप किस शेल का उपयोग कर रहे हैं, आप किस एसएसएच संस्करण का उपयोग कर रहे हैं, आदि। इसलिए इनमें से कुछ को थोड़ा समायोजित करने की आवश्यकता हो सकती है; यह ओपनएसएसएच के उचित हाल के संस्करणों पर आधारित है, जिसका उपयोग कई यूनिक्स रूपों पर किया जाता है।

यह सब आपके स्थानीय डेस्कटॉप सिस्टम से है।

ssh-keygen

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

ssh-copy-id username@server

वह आपको उस पासवर्ड के लिए पूछेगा जिसका उपयोग आप लॉग इन करने के लिए करेंगे, और आपके लिए अधिकृत_की सामान सेट अप करेगा। (हाथ से ऐसा करने की ज़रूरत नहीं है)

फिर यह:

`ssh-agent`

या शायद यह:

exec ssh-agent sh

या:

exec ssh-agent bash

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

कई आधुनिक यूनिक्स वेरिएंट में आपके लिए पहले से ही एक एजेंट चल रहा है, खासकर अगर आपने ग्राफिक रूप से लॉग इन किया है। आप कोशिश कर सकते हैं "ps aux | grep ssh-agent"या"ps -ef | grep ssh-agent"; अगर कुछ पहले से चल रहा है, तो इसका इस्तेमाल करें।

फिर अंत में:

ssh-add

यह एक पासफ्रेज मांगेगा; इसे वह दें जिसे आपने एसएसएच-कीजेन दिया था। इसे ग्राफिक रूप से पूछने के तरीके भी हैं। और आप इसे स्वचालित करने के लिए एसएसएच-एजेंट और एसएसएच-एड सामान को अपनी लॉगिन स्क्रिप्ट में सेट कर सकते हैं (सेटअप आपके द्वारा उपयोग किए जाने वाले खोल के आधार पर अलग है), लेकिन कुछ यूनिक्स वेरिएंट (उदाहरण के लिए वर्तमान उबंटू लिनक्स) स्वचालित रूप से ऐसा करते हैं, इसलिए आपको केवल इतना करना है कि एक कुंजी बनाएं और इसे दूरस्थ होस्ट पर सेट करने के लिए ssh-copy-id का उपयोग करें।

अभी व, "ssh username@server"किसी भी प्रमाणीकरण के बिना काम करना चाहिए। दृश्यों के पीछे, यह एक कुंजी का उपयोग कर रहा है जो एसएसएच एजेंट धारण कर रहा है, और एजेंट से इसके लिए जादू हस्ताक्षर करने के लिए कह रहा है।


18





इसमें ऐसा करना संभव है पुट्टी विंडोज़ पर भी।

एक बार जब आपके पास सार्वजनिक / निजी कुंजी जोड़ी सेट हो जाती है (जैसा कि यहां अन्य उत्तरों दिखाए जाते हैं) PuttyGen चलाएं। वहां, मौजूदा निजी कुंजी को लोड करें जिसे आपने पहले से सेट अप किया है, और उसके बाद उसे पुटी प्राइवेट कुंजी (पीपीके) के रूप में सहेजें।

फिर पुटी में, बस उस सहेजे गए सत्र पर क्लिक करें जिसे आप स्वतः लॉगिन करना चाहते हैं और लोड पर क्लिक करें। यहां से कनेक्शन में जाएं -> बाएं फलक में डेटा, और उस दूरस्थ सर्वर के उपयोगकर्ता नाम में "ऑटो-लॉगिन उपयोगकर्ता नाम" प्रकार में:

PuTTY username entry

उसके बाद कनेक्शन में जाएं -> एसएसएच -> ऑथ, और पुटीगेन में किए गए पीपीके के लिए ब्राउज करें:

PuTTY private key entry

फिर सत्र पृष्ठ पर वापस जाएं और आपके द्वारा पहले लोड किए गए सत्र को सहेजें।


11



पहला छवि लिंक, "पुटी यूजरनेम एंट्री", टूटा हुआ प्रतीत होता है। - Peter Mortensen
पुटी में एसएसएच एजेंट का अपना संस्करण शामिल है; इसे पेजेंट कहा जाता है। यह सिस्टम ट्रे में चलता है और आपके लिए आपकी कुंजी रखता है। आपको कभी भी एसश-एजेंट चलाने की आवश्यकता नहीं है, केवल ऑथ सेक्शन के तहत पुटी के विकल्पों में "एजेंट अग्रेषण की अनुमति दें" की जांच करें, और पेजेंट के कनेक्शन को आपके मुख्य एजेंट को उपलब्ध कराने के लिए दूरस्थ अंत में अग्रेषित किया जाएगा। - Kevin Panko


एक बहुत ही समान सवाल से ServerFault, मैं उपयोग करने की सिफारिश करेंगे ssh-प्रति-आईडी, जो आपके लिए प्रमाणीकरण कुंजी सेट करने के साथ जुड़े सभी चरणों को करता है:

एसएसएच-कॉपी-आईडी एक स्क्रिप्ट है जो एसएसएच का उपयोग करती है   एक दूरस्थ मशीन में लॉग इन करने के लिए   (संभवतः एक लॉगिन पासवर्ड का उपयोग कर, तो   पासवर्ड प्रमाणीकरण होना चाहिए   सक्षम, जब तक आप कुछ नहीं किया है   कई पहचानों का चालाक उपयोग)

यह भी अनुमतियों को बदलता है   रिमोट यूजर का घर, ~ /। एसएसएच, और   समूह को हटाने के लिए ~ / .ssh / अधिकृत_की   उत्तरदायित्व (जो अन्यथा होगा   यदि आप लॉग इन करने से रोकते हैं, तो   रिमोट एसएसडीडी में स्ट्रिक्टोड्स सेट है   विन्यास)।

यदि -i विकल्प दिया जाता है तो   पहचान फ़ाइल (के लिए डिफ़ॉल्ट   ~ / .ssh / identity.pub) का उपयोग किया जाता है,   भले ही कोई है या नहीं   आपके एसएसएच एजेंट में चाबियां।

आपको बस इतना करना है:

ssh-copy-id user@host

एक बार अपना पासवर्ड टाइप करें, और आप जाने के लिए अच्छे हैं!


3





एसएसएच कुंजी सेट करने के तरीके पर पहले से ही बताया गया है, मैं अनुशंसा करता हूं कीचेन के रूप में ssh-एजेंट कंसोल फ्रंटएंड जो आपको प्रति लॉगिन की बजाय प्रति सिस्टम प्रक्रिया को संभालने की अनुमति देता है।

मुझे पता है कि पहले से ही गनोम और केडीई उपकरण हैं जो वही करते हैं लेकिन यदि आप हैं कंसोल जंकी टाइप करें यह बहुत अच्छा है (और अधिकांश यूनिक्स सिस्टम पर इसका उपयोग किया जा सकता है)।

इसका उपयोग करने के लिए, बस अपने आप को निम्नलिखित संलग्न करें ~/.bashrc (अन्य गोले के लिए समान):

if type keychain >/dev/null 2>/dev/null; then
  keychain --nogui -q <all your SSH/PGP keys>
  [ -f ~/.keychain/${HOSTNAME}-sh ] && . ~/.keychain/${HOSTNAME}-sh
  [ -f ~/.keychain/${HOSTNAME}-sh-gpg ] && . ~/.keychain/${HOSTNAME}-sh-gpg
fi

3





http://linuxproblem.org/art_9.html

आपका लक्ष्य

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


2



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


वास्तव में वास्तव में वास्तव में निराशाजनक होने के बाद मैंने वास्तव में बहुत ही कम ट्यूटोरियल लिखा है वास्तव में यह वास्तव में बहुत आसान है :)

test -f ~/.ssh/id_rsa.pub || ssh-keygen -t rsa #press enter twice if given prompts, then "ssh-add"

scp ~/.ssh/id_rsa.pub destID@destMachine:/tmp/ #type password

ssh destID@destMachine #type password

cat /tmp/id_rsa.pub >> ~/.ssh/authorized_keys

rm /tmp/id_rsa.pub

2