उपयोगकर्ता नाम / पासवर्ड के बजाय कुंजियों के उपयोग को प्रमाणित करने के लिए आप सेटअप कैसे करते हैं?


34

उपयोगकर्ता नाम / पासवर्ड के बजाय कुंजियों का उपयोग करके किसी उपयोगकर्ता को प्रमाणित करने के लिए आप सेटअप कैसे करते हैं?

जवाबों:


27

प्रत्येक उपयोगकर्ता के लिए: वे (उनके स्थानीय मशीन पर) उत्पन्न करनी चाहिए उनके कुंजीयुग्म का उपयोग कर ssh-keygen -t rsa( rsaसाथ बदला जा सकता dsaहै या rsa1भी है, हालांकि उन विकल्पों की सिफारिश नहीं कर रहे हैं)। फिर उन्हें अपनी सार्वजनिक कुंजी ( id_rsa.pub) की सामग्री ~/.ssh/authorized_keysको सर्वर पर लॉग इन करने की आवश्यकता होती है।


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

2
Chmod को न भूलें 0700 .shsh chmod 0600 .sh / अधिकृत_कीप्स
डेव चेनी

3
निश्चित रूप से इस तरह से चाबियाँ उत्पन्न करें, लेकिन फिर "ssh-copy-id" के बारे में @ क्रिस बंच की पोस्ट देखें। अपने 'id_rsa.pub' को स्थानांतरित करने का यही तरीका है।
गारेथ

@gyaresu: धन्यवाद! मैंने अभी कुछ नया सीखा है! :-D
क्रिस जस्टर-यंग

23

मैं वास्तव में ssh-copy-id पसंद करता हूं , एक स्क्रिप्ट जो डिफ़ॉल्ट रूप से * निक्स पर मिलती है ( मैक ओएस एक्स पर आसानी से पर्याप्त रूप से अच्छी तरह से रखी जा सकती है ) जो स्वचालित रूप से आपके लिए ऐसा करती है। मैन पेज से:

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

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

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


2
@ क्रिस बंच हर कोई यहाँ देखो! :) ssh-copy-id निश्चित रूप से किसी के id_rsa.pub को साझा करने का तरीका है
Gareth

1
कूल, मुझे इस बारे में कभी नहीं पता था ... मैंने अपनी स्क्रिप्ट को बिल्कुल एक ही काम करने के लिए लिखा: - /
डेविड जेड

6

हम, यह नहीं मिलता है। बस एक कुंजी बनाएं और आरंभ करें। :) HOWTO Additionatly आप पासवर्ड के माध्यम से लॉगिन को मना कर सकते हैं। उदाहरण के लिए / etc / ssh / sshd_config:

PasswordAuthentication no

2
और आपको UsePAM no (या PAM को तदनुसार कॉन्फ़िगर करना होगा) सेट करना होगा। यह आश्चर्यजनक है कि कितने HOWTO इस भाग को याद करते हैं। ऐसा करने में विफलता के परिणामस्वरूप आपको पासवर्ड का उपयोग करके लॉगिन करने में सक्षम होना पड़ेगा।
नाथन

3

यह करने के लिए काफी सीधा-आगे है - यहाँ पाया जाने वाला एक साधारण वॉकथ्रू है

मुख्य बिंदु हैं:

  • ssh-keygenअपनी मशीन पर चलाएं । यह आपके लिए सार्वजनिक और निजी कुंजी उत्पन्न करेगा।
  • रिमोट मशीन पर अपनी सार्वजनिक कुंजी (संभावना ~/.ssh/id_rsa.pub) की सामग्री को कॉपी और पेस्ट करें ~/.ssh/authorized_keys

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


मैं कॉपी करने के बजाय कट-एंड-पेस्ट की सलाह देता हूं। एक अधिकृत_की फ़ाइल में कई कुंजियाँ हो सकती हैं, और आप पहले से वहाँ मौजूद अन्य कुंजियों को बंद नहीं करना चाहते हैं।
क्रिस जस्टर-यंग

मेरे पसंदीदा वॉकथ्रू को वेबैक मशीन के लिए भेज दिया गया है: web.archive.org/web/20061103103161446/http://…
फिलिप डर्बिन

@ क्रिस उफ़ - मैं इसे लिखने के बजाय फाइल पर कॉपी करने का मतलब था! उत्तर को स्पष्ट करने के लिए अब अपडेट किया गया है
ConroyP


1

दूसरों ने जो कहा है, उसे संक्षेप में बताने के लिए, SSH कुंजी सेट करना आसान और अमूल्य है।

जिस मशीन से आप SSHing करेंगे, उस पर आपको अपनी प्रमुख जोड़ी बनाने की जरूरत है:

claudius:~$ ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/home/dinomite/.ssh/id_rsa): <ENTER>
Enter passphrase (empty for no passphrase): <PASSPHRASE>
Enter same passphrase again: <PASSPHRASE>
Your identification has been saved in /home/dinomite/.ssh/id_rsa.
Your public key has been saved in /home/dinomite/.ssh/id_rsa.pub.
The key fingerprint is:
a3:93:8c:27:15:67:fa:9f:5d:42:3a:bb:9d:db:93:db dinomite@claudius

संकेत दिए जाने पर केवल एंटर करें और पासफ़्रेज़ दर्ज करें - आदर्श रूप से यह वर्तमान होस्ट और आपके द्वारा SSH करने वाले दोनों पर आपके नियमित लॉगिन पासवर्ड से अलग है।

इसके बाद, आप कुंजी तुम सिर्फ मेजबान है कि आप SSH करना चाहते करने के लिए उत्पन्न कॉपी करने की जरूरत करने के लिए । अधिकांश लिनक्स वितरण में ssh-copy-idऐसा करने के लिए एक उपकरण होता है :

claudius:~$ ssh-copy-id caligula.dinomite.net
Now try logging into the machine, with "ssh 'caligula.dinomite.net'", and check in:

  .ssh/authorized_keys

to make sure we haven't added extra keys that you weren't expecting.

यदि आपके वितरण में ऐसा नहीं है, तो आपको गंतव्य होस्ट की कुंजी को कॉपी करना चाहिए और इसे (संभवतः मौजूदा) .ssh/authorized_keysफ़ाइल में जोड़ना चाहिए :

claudius:~$ scp .ssh/id_dsa.pub caligula.dinomite.net:
id_dsa.pub                                    100% 1119     1.1KB/s   00:00
claudius:~$ ssh caligula.dinomite.net
Last login: Sat May  9 10:32:30 2009 from claudius.csh.rit.edu
Caligula:~$ cat id_dsa.pub >> .ssh/authorized_keys

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

SSHAGENT=/usr/bin/ssh-agent
SSHAGENTARGS="-s"
if [ -z "$SSH_AUTH_SOCK" -a -x "$SSHAGENT" ]; then
    eval `$SSHAGENT $SSHAGENTARGS`
trap "kill $SSH_AGENT_PID" 0
fi

1

यह एक चेकलिस्ट के रूप में करना है। यदि कोई इसे बिंदु-दर-बिंदु का अनुसरण करता है, तो पासवर्ड रहित लॉगिन के लिए सबसे सामान्य गोच को कवर किया जाना चाहिए। इनमें से अधिकांश बिंदुओं का उल्लेख अन्यत्र किया गया है; यह एक एकत्रीकरण है।

खाते के तहत प्रत्येक मशीन पर एक ~/.sshनिर्देशिका होनी चाहिए chmod 700जो कनेक्शन उत्पन्न करेगी या प्राप्त करेगी।

पासफ़्रेज़ के बिना (निजी) कुंजी उत्पन्न होनी चाहिए, या एक एजेंट शुरू किया जा सकता है जो क्लाइंट के लिए पासफ़्रेज़-असर कुंजी के डिक्रिप्टेड संस्करण का उपयोग करेगा। एजेंट के साथ शुरू करो ssh-agent $SHELL। यह वह $SHELLहिस्सा है जो मुझे खोजने में थोड़ी देर लगा। यदि आप किसी एजेंट का उपयोग करना चाहते हैं, तो पुरुष पृष्ठ देखें, जिसमें विविध विवरण हों।

यह मत भूलो कि डिफ़ॉल्ट रूप से कमजोर (<2048 बिट डीएसए) चाबियाँ sshd के हाल के संस्करणों द्वारा स्वीकार नहीं की जाती हैं।

कनेक्शन उत्पन्न करने के लिए क्लाइंट-साइड मशीन पर निम्नलिखित कार्य करना चाहिए ।

  1. आपकी निजी कुंजी को उचित रूप में ~/.ssh/id_rsaया उसके अंदर रखा जाना चाहिए ~/.ssh/id_dsa। आप किसी अन्य नाम का उपयोग कर सकते हैं, लेकिन फिर निजी कुंजी को स्पष्ट रूप से इंगित करने के लिए मूल मशीन पर ssh कमांड पर इसे ai विकल्प में शामिल किया जाना चाहिए।

  2. आपकी निजी कुंजी होनी चाहिए chmod 600

  3. जांचें कि आपका होम फ़ोल्डर क्या है chmod 700

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

  1. आपकी सार्वजनिक कुंजी को उस फ़ाइल के ~/.ssh/authorized_keysनीचे रखा जाना चाहिए जिसे उस खाते के तहत बुलाया जाएगा जो कनेक्शन प्राप्त करेगा । आप अन्य कुंजियाँ रख सकते हैं जिन्हें इस खाते के माध्यम से यहाँ भी जोड़ने की अनुमति है। यदि आप vi में हैं और पीटीटीवाई में पेस्ट बफर से फाइल में कुंजी चिपकाना एक विशेष रूप से मुश्किल बात है, तो यह है: कुंजी "ssh-" से शुरू होती है। यदि आप इन्सर्ट मोड में नहीं हैं, तो पहले "s" इन्स को इन्सर्ट मोड में डाल देंगे और बाकी की की बस ठीक दिखेंगी। लेकिन आपको कुंजी की शुरुआत में एक "s" याद आ रही होगी। मुझे इसे खोजने में कई दिन लग गए।
  2. मुझे पसंद है chmod 600 ~/.ssh/authorized_keys। यह कम से कम gw होना चाहिए।
  3. अब, आपके पास होस्ट फ़िंगरप्रिंट कैश में जोड़ा जाना चाहिए। मशीन A पर जाएं, और मशीन B से मैन्युअल रूप से Ssh करें। पहली बार, आपको एक क्वेरी मिलेगी जैसे "क्या आप जोड़ना चाहते हैं। होस्ट होस्ट कैश में?"। यदि आप इस लॉगिन का उपयोग करने के लिए स्वचालन (जैसे स्क्रिप्ट) प्राप्त करने का प्रयास कर रहे हैं, तो आपको यह सुनिश्चित करना होगा कि स्वचालन द्वारा उपयोग किए जा रहे ssh क्लाइंट को यह संकेत नहीं मिलेगा।

0

जैसा कि अन्य लोगों ने कहा है, आपके उपयोगकर्ताओं को अपने क्लाइंट मशीनों पर ssh-keygen के साथ खुद के लिए कीपेयर बनाने चाहिए और जिस मशीन में वे लॉग इन करना चाहते हैं, उस पर अपनी सार्वजनिक ~ ~ / ssh / अधिकृत_कीज़ जोड़ सकते हैं।

हालांकि अधिक विस्तृत जानकारी के लिए, मैं SSH, द सिक्योर शेल की अत्यधिक अनुशंसा करता हूं ।


0

यहाँ पर अच्छी सलाह है, इसलिए मैं इसे नहीं दोहराऊंगा। एक बार जब आप कुंजी के साथ साइन इन करने की अनुमति देने के लिए एक सर्वर सेट करते हैं, तो आप इस एक लाइनर के साथ ऐसा करने के लिए दूसरों को सेटअप कर सकते हैं:

remote=server1 server2 server3 server4
for r in $remote; do echo connecting to $r; tar czf - ./.ssh/id*.pub ./.ssh/authorized_keys2 ./.ssh/config | ssh $r "tar zxf -; chmod 700 .ssh" ; done

बस अपने घर निर्देशिका के लिए सीडी, चर रिमोट को एक या कई सर्वर नामों के रूप में परिभाषित करें और एक बार में एक गुच्छा करें। यह जो पासवर्ड मांगता है वह रिमोट सर्वर के लिए आपका ssh पासवर्ड होगा। आप बेशक लूप के बिना एक सरलीकृत संस्करण का उपयोग कर सकते हैं:

tar czf - ./.ssh/id*.pub ./.ssh/authorized_keys2 ./.ssh/config | ssh YOUR_SERVER_NAME_HERE "tar ztvf -; chmod 700 .ssh"

रिमेंबर: केवल अपनी सार्वजनिक कुंजियों की प्रतिलिपि बनाएँ। आप कुछ सर्वर पर बैठे अपने निजी कुंजी नहीं चाहते हैं, जहां कोई भी sudo उन्हें कॉपी कर सकता है और आपके पासफ़्रेज़ को भंग कर सकता है।

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