मैं पासवर्ड-कम SSH लॉगिन कैसे सेट कर सकता हूं?


252

मैं हर समय पासवर्ड दर्ज किए बिना ssh के माध्यम से रिमोट में लॉगिन करने में सक्षम होना चाहता हूं।

  • मैं इसे किस तरह से सेट अप करूं?
  • क्या पासवर्ड-कम सत्र को निष्पादित करने के लिए एक अलग कमांड की आवश्यकता है?

क्या आप ओपनश का उपयोग कर रहे हैं? (अगर ऐसा आसान है;))
रिनविंड

@Rinzwind, OpenSSH पहले से इंस्टॉल होने पर मैं मालिकाना संस्करण प्राप्त करने से क्यों परेशान होगा?
ऑक्सीविवि

15
); मैं assuptions नहीं करने का प्रयास करें
Rinzwind

1
@ केविन, कृपया अपने आप को स्पष्ट करें। हम पासवर्ड के बिना ssh-ing के बारे में बात कर रहे हैं, जो आम तौर पर एक अच्छा अभ्यास है । क्या आपका मतलब है ssh-ing एक रूट शेल में? वह इस प्रश्न से आच्छादित नहीं है।
ऑक्सीविली

@Oxwivi: क्षमा करें, यह रवींद्र के उत्तर पर एक टिप्पणी होनी चाहिए, जो रूट लॉगिन पर लक्षित है।
केविन

जवाबों:


266

उत्तर

इस आदेश को निष्पादित करें:

ssh-keygen

फिर आपको अपने सर्वर पर नई कुंजी की प्रतिलिपि बनाने की आवश्यकता होगी :

ssh-copy-id user@host
## or if your server uses custom port no:
ssh-copy-id "user@host -p 1234"

कुंजी कॉपी होने के बाद, मशीन में सामान्य रूप से ssh:

ssh user@host

अब आप उस विशेष मशीन से पासवर्ड दर्ज किए बिना लॉगिन कर सकते हैं जिस पर आपने कमांड निष्पादित की थी।

उदाहरण

not-marco@rinzwind-desktop:~$ ssh-keygen 
Generating public/private rsa key pair.
Enter file in which to save the key (/home/not-marco/.ssh/id_rsa): 
Created directory '/home/not-marco/.ssh'.
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /home/not-marco/.ssh/id_rsa.
Your public key has been saved in /home/not-marco/.ssh/id_rsa.pub.
The key fingerprint is:
b1:25:04:21:1a:38:73:38:3c:e9:e4:5b:81:e9:ac:0f not-marco@rinzwind-desktop
The key's randomart image is:
+--[ RSA 2048]----+
|.o= . oo.        |
|*B.+ . .         |
|*=o .   o .      |
| = .     =       |
|. o     S        |
|E.               |
| o               |
|  .              |
|                 |
+-----------------+

not-marco@rinzwind-desktop:~$ ssh-copy-id not-marco@server
not-marco@server's password: 
Now try logging into the machine, with "ssh 'not-marco@server'", and check in:

  ~/.ssh/authorized_keys

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

व्याख्या

यह मानता है कि आप पहले से ही SSH के माध्यम से अपने सर्वर से सफलतापूर्वक जुड़ सकते हैं।

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

  1. सबसे पहले अपना SSH Keypair बनाएं इसको चलाकर a और फाइल ssh-keygenबनाएं । फ़ाइल क्या सर्वर पर चला जाता है, निजी कुंजी (है ) क्या आप के साथ रहता है और आप अपने आप को कैसे की पहचान है।id_rsaid_rsa.pubpubid_rsa
  2. अगली बार सार्वजनिक कुंजी को अपने ssh-copy-id user@serverदूरस्थ उपयोगकर्ता और मशीन DNS नाम या आईपी पते के साथ उपयोगकर्ता को बदलने के साथ अपने सर्वर पर कॉपी करें । यह आपके SSH पासवर्ड के लिए संकेत देगा, इसे दर्ज करें और यदि सभी सफलतापूर्वक पूरा हो जाता है तो आप ssh user@serverपासवर्ड की आवश्यकता के बिना मशीन का उपयोग कर पाएंगे ।

संदर्भ


11
@Oxwivi यह उत्तर इसे करने का अधिक सही तरीका है - लेकिन यह अधिक लंबा लगता है। सभी आप टाइप करने की जरूरत है ssh-keygenस्क्रीन पर निर्देशों का पालन करें, फिर टाइप ssh-copy-id user@serverरिमोट मशीन के साथ अपने दूरस्थ उपयोगकर्ता और सर्वर के साथ उपयोगकर्ता की जगह
मार्को Ceppi

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

1
यह उल्लेख के लायक है कि यदि आपको @server के लिए कस्टम पोर्ट का उपयोग करने की आवश्यकता है, तो आपको इसके साथ करने की आवश्यकता है ssh-copy-id "not-marco@127.0.0.1 -p 1234":।
s3m3n

@ रिनविंड: इसका मतलब यह है कि मैं कभी भी किसी अज्ञात क्लाइंट / मशीन से अपने सर्वर पर प्रमाणित नहीं कर सकता हूं यदि मैं पासवार्ड प्रमाणीकरण को अक्षम करता हूं और केवल कुंजी प्रमाणीकरण की अनुमति देता हूं। क्या सर्वर से संवाद करने के लिए ज्ञात / कॉन्फ़िगर क्लाइंट के लिए उत्पन्न निजी कुंजी का उपयोग करके अज्ञात मशीन से लॉगिन की अनुमति देने का कोई तरीका है? मेरा मतलब है, क्या यह निजी कुंजी पोर्टेबल है और इसका उपयोग आपातकालीन जरूरतों के मामले में खुद को अन्य मशीनों से सर्वर पर प्रमाणित करने के लिए किया जा सकता है ??
रजत गुप्ता

4
लेकिन सर्वर अभी भी पासवर्ड के लिए पूछ रहा है ,,,
लेर्नर झांग

34

निम्नलिखित कमांड टाइप करें:

  1. ssh-keygen

    प्रेस Enterकुंजी जब तक आप संकेत मिलता है

  2. ssh-copy-id -i root@ip_address

    (यह एक बार होस्ट सिस्टम का पासवर्ड पूछेगा)

  3. ssh root@ip_address

अब आपको बिना किसी पासवर्ड के लॉगिन करने में सक्षम होना चाहिए।


25

जिस तरह से मैं आमतौर पर ऐसा करता हूं वह इस प्रकार है:

ssh-keygen -t rsa

(जब पासवर्ड के लिए कहा जाए, तो इसे खाली छोड़ दें)

फिर: cat ~/.ssh/id_rsa.pub | ssh username@hostname 'cat >> .ssh/authorized_keys'

(इसके लिए फ़ोल्डर को .ssh को लक्षित hostname पर होम डायरेक्टरी में होना चाहिए, इसमें अधिकृत_की फ़ाइल के साथ)

बेशक, उपयोगकर्ता नाम को वांछित उपयोगकर्ता नाम और होस्टनाम को वांछित होस्टनाम या आईपी पते से बदलें

उसके बाद, बस उस बॉक्स के लिए SSH की तरह आप करने के लिए इस्तेमाल कर रहे हैं।


रिनविंड के उत्तर में touchऔर chmodकमांड के बारे में क्या ?
ऑक्सीविवि

7
आप chmod करने की आवश्यकता होगी .ssh/authorized_keys0600 के लिए फ़ाइल या इस काम नहीं करेगा
मार्को Ceppi

यह वास्तव में मदद करता है क्योंकि मैं अपने सर्वर पर रूट के लिए काम करने के लिए ssh-copy-id नहीं प्राप्त कर सका। यह उस स्थिति में मूल होना चाहिए जहां बैकपेक (या किसी अन्य डेमॉन) को किसी अन्य मशीन पर ssh करने की आवश्यकता होती है।
एडम

18

मैं सामान्य रूप से इसके लिए उपयोग करता हूं sshpass, इसे स्थापित करता हूं sudo apt-get install sshpassऔर इसे इस तरह से उपयोग करता हूं

sshpass -p 'password' ssh your_username@your_server

6
क्यों ssh कुंजी का उपयोग करने के लिए नहीं?
enzotib

1
यह एक "क्यों नहीं" स्थिति नहीं है, यह अभी भी चाबियाँ जोड़ने के बिना एकदम सही काम करता है, इसका सिर्फ एक और तरीका जो मैं कहूंगा।
ब्रूनो परेरा

Sshpass की जानकारी के लिए धन्यवाद, इसके बारे में पहले कभी नहीं सुना।
पैंथर

7
SSH कुंजी प्रश्न का "सही" उत्तर है, लेकिन sshpassउन मामलों में बहुत उपयोगी हैक है जब आप दूरस्थ सर्वर पर प्रमाणीकरण विधि को बदल नहीं सकते हैं!
जैकब क्रॉल

9
यह बहुत खतरनाक है, आप bash_history या आपके द्वारा कनेक्ट किए जा रहे मेजबानों के लिए सादे पासवर्ड को बनाए रखेंगे
kappa

10

पासवर्ड प्रमाणीकरण अक्षम करें

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

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

जब तक आपके पास कोई विशिष्ट कारण न हो, तब तक पासवर्ड प्रमाणीकरण अक्षम करने की अनुशंसा की जाती है।

पासवर्ड प्रमाणीकरण को अक्षम करने के लिए, अपनी sshd_config फ़ाइल में निम्न पंक्ति देखें:

#PasswordAuthentication yes

इसे इस तरह दिखने वाली लाइन से बदलें:

PasswordAuthentication no

एक बार जब आप फ़ाइल को सहेज लेते हैं और अपने SSH सर्वर को फिर से शुरू करते हैं, तो जब आप लॉग इन करते हैं तो आपसे पासवर्ड भी नहीं पूछा जाना चाहिए।

https://help.ubuntu.com/community/SSH/OpenSSH/Configuring#disable-password-authentication


2
यह सबसे बुनियादी सही उत्तर है लेकिन सुरक्षा के लिए अच्छा है! इसके अलावा रूट लॉगिन को निष्क्रिय करना एक और अच्छा है
FreeSoftwareServers

PasswordAuthentication noसभी उपयोगकर्ताओं को प्रभावित करता है ? यदि नहीं, तो मैं इसे सामान्य उपयोगकर्ताओं के लिए कैसे बंद कर दूं लेकिन इसे परीक्षण करते समय रूट के लिए अपरिवर्तित छोड़ दूं? मैं वास्तव में इसे नाकाम नहीं करना चाहता हूं और खुद को पूरी तरह से बंद कर देना चाहता हूं।
एडम

एक ssh सत्र खुला रखें ताकि आप इसे वापस बदल सकें। आप पासवर्ड और रूट को निष्क्रिय करना चाहते हैं। हाँ, आप इसे फ़ुबर कर सकते हैं। नहीं;)
थुफ़िर

Ssh के दौरान, मेरे पास एक त्रुटि Permission denied (publickey).है PasswordAuthentication no। मुझे क्या करना चाहिए? क्या मैं PasswordAuthentication noदूसरे होस्ट पर बदल सकता हूं ?
ParisaN

9

यह समाधान उपयोगकर्ताओं प्रयोग करने के लिए विशेष रूप से है विंडोज के लिए ssh पर बादल छवियों सहित उनके रिमोट मशीनों में एडब्ल्यूएस बादल और GCE बादल

अस्वीकरण

हाल ही में इस समाधान का उपयोग GCE पर दूरस्थ लॉगिन नई तैनात vm छवियों के लिए किया गया।


उपकरणों का इस्तेमाल:

  1. puttygen puttygen डाउनलोड करें
  2. winscp wincp डाउनलोड

प्रदर्शन करने के लिए कदम:

  1. Puttygen का उपयोग करके सार्वजनिक / निजी कुंजी जोड़ी बनाएं।
  2. क्लाउड या दूरस्थ स्थान पर अपने सर्वर पर सार्वजनिक कुंजी अपलोड करें।

यह कैसे करना है:

1. एक कुंजी / जोड़ी उत्पन्न करें या मौजूदा निजी कुंजी का उपयोग करें

यदि आपके पास एक निजी कुंजी है:

puttygenलोड बटन खोलें , खोलें और अपनी निजी कुंजी ( *.pem) फ़ाइल चुनें।


यदि आपके पास निजी कुंजी नहीं है:

  • खोलें puttygen,
  • वांछित कुंजी प्रकार SSH2 DSA का चयन करें (आप RSA या DSA का उपयोग कर सकते हैं) पैरामीटर अनुभाग के भीतर । यह महत्वपूर्ण है कि आप पासफ़्रेज़ फ़ील्ड को खाली छोड़ दें।
  • generate(सार्वजनिक / निजी) कुंजी जोड़ी बनाने के लिए निर्देशों को दबाएं और उनका पालन करें।

नमूना कुंजी पीढ़ी चित्र

(स्रोत 1 से, नीचे दिया गया लिंक)

2. एक नई 'अधिकृत_की' फ़ाइल बनाएँ (साथ notepad)

"सार्वजनिक कुंजी को OpenSSH अधिकृत_की फ़ाइल में चिपकाने के लिए" से अपने सार्वजनिक कुंजी डेटा को कॉपी करें और पुट्टी कुंजी जनरेटर के अनुभाग में जाएं, और कुंजी डेटा को authorized_keysफ़ाइल में पेस्ट करें ।


सुनिश्चित करें कि इस फ़ाइल में पाठ की केवल एक पंक्ति है।


3. लिनक्स सर्वर पर कुंजी अपलोड करें

  • WinSCP खोलें,
  • SFTP फ़ाइल प्रोटोकॉल का चयन करें और अपने ssh क्रेडेंशियल के साथ लॉगिन करें।
  • सफलता मिलने पर, आप अपने रिमोट मशीन में होम डायरेक्टरी स्ट्रक्चर देखते हैं।

दूरस्थ मशीन पर होम निर्देशिका में अधिकृत_कील्स फ़ाइल अपलोड करें।


4. उचित अनुमतियाँ सेट करें

.sshनिर्देशिका बनाएं (यदि मौजूदा नहीं है)


निर्देशिका के authorized_keysलिए फ़ाइल की प्रतिलिपि बनाएँ .ssh
(यह किसी भी मौजूद authorized_keysफ़ाइल को बदल देगा , इस पर ध्यान दें)।

यदि फ़ाइल मौजूद है, तो मौजूदा फ़ाइल में इस फ़ाइल की सामग्री जोड़ें।


अनुमतियाँ सेट करने के लिए आदेश चलाएँ:

sudo chmod 700 .ssh && chmod 600 .ssh/authorized_keys

अब आप sshहर बार क्रेडेंशियल दर्ज किए बिना रिमोट मशीन में जा सकेंगे ।

आगे की पढाई:


4

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

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

इस आदेश में एक काफी मजबूत कुंजी उत्पन्न करता है ~/.ssh/:

ssh-keygen -b 4096

में ~/.ssh/आप के रूप में अपने सार्वजनिक कुंजी मिलेगा id_rsa.pub। इसकी सामग्री को authorized_keysट्रांसपोर्टेबल मीडिया (पेन ड्राइव) के माध्यम से या सर्वर पर पासवर्ड प्रमाणीकरण को शीघ्र ही सक्षम करके, फिर इसका उपयोग करके ssh-copy-id ~/.ssh/id_rsa.pub username@serverऔर फिर इसे अक्षम करके आपकी सर्वर फ़ाइल में जोड़ा जाना चाहिए ।

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


3

कुछ अतिरिक्त बनाने के लिए:

  • मैक डिफ़ॉल्ट रूप से नहीं है ssh-copy-id, आपको इसे स्वयं स्थापित करना होगा:

    curl https://raw.github.com/beautifulcode/ssh-copy-id-for-OSX/master/ssh-copy-id.sh -o /usr/local/bin/ssh-copy-id
    chmod +x /usr/local/bin/ssh-copy-id
    

यहाँ और अधिक जानकारी प्राप्त करें: https://github.com/beautifulcode/ssh-copy-id-for-OSX

  • यदि आपने पोर्ट-फ़ॉरवर्डिंग किया है, तो कमांड इस तरह होनी चाहिए:

    ssh-copy-id "not-marco@127.0.0.1 -p 2222"
    

ध्यान दें कि उद्धरण आवश्यक हैं।


3

पासवर्ड दिए बिना रिमोट लॉगिन / कॉपी

अनुप्रयोगों sshऔर scpदूरस्थ लॉगिन और दूरस्थ प्रतिलिपि के लिए, क्रमशः, आपको पासवर्ड दिए बिना एक दूरस्थ होस्ट के साथ संवाद करने की अनुमति देता है। इसके लिए आवश्यक है कि आप नीचे बताई गई तरह एक प्रमाणीकरण प्रक्रिया का पालन करें। क्लाइंट से हमारा मतलब है कि मशीन आपके द्वारा बैठी हुई है और सर्वर से हमारा मतलब है कि मशीन जिसे आप पासवर्ड दिए बिना लॉग ऑन करना चाहते हैं। प्रमाणीकरण प्रक्रिया के चरण हैं:

  1. निजी और सार्वजनिक कुंजी उत्पन्न करने के लिए ssh-keygen चलाएं, जब तक कि यह आपकी मशीन पर पहले से ही न हो। इन फ़ाइलों में संग्रहीत हैं $HOME/.ssh
  2. सार्वजनिक कुंजी फ़ाइल की सामग्री को फ़ाइल $HOME/.ssh/authorized_keysया $HOME/.ssh/authorized_keys2सर्वर पर लागू करें।

प्रमाणीकरण प्रोटोकॉल के तीन अलग-अलग प्रकार हैं। आप ssh-keygen चलाते समय प्रकार निर्दिष्ट करते हैं:

  1. SSH प्रोटोकॉल संस्करण 1, RSA1: यह डिफ़ॉल्ट विकल्प है और फ़ाइलों की पहचान में परिणाम (निजी कुंजी, chmod 0700यह सुनिश्चित करना चाहिए कि यह फ़ाइल दूसरों के लिए पठनीय नहीं है) और पहचानपब (सार्वजनिक कुंजी)।
  2. SSH प्रोटोकॉल संस्करण 1, RSA : यह ssh-keygen -t rsaफाइलों में चल रहा है और परिणाम id_rsa(निजी कुंजी) और id_rsa.pub(सार्वजनिक कुंजी) द्वारा प्राप्त किया गया है
  3. SSH प्रोटोकॉल संस्करण 1, DSA : यह ssh-keygen -t dsaफाइलों में चल रहा है और परिणाम id_dsa(निजी कुंजी) और id_dsa.pub(सार्वजनिक कुंजी) द्वारा प्राप्त किया गया है

Ssh-keygen चलाते समय आप डिफ़ॉल्ट उत्तर पर भरोसा कर सकते हैं (इसका मतलब यह है कि आप पासफ़्रेज़ नहीं देते हैं)। यह पूरे सेट-अप को सरल बनाता है, लेकिन असुरक्षित भी है।

आप ssh के विकल्प के द्वारा उपयोग की जाने वाली कुंजी के प्रकार को निर्दिष्ट कर सकते हैं ; ssh -1की ताकतों उपयोग RSA1 कुंजियों (प्रोटोकॉल संस्करण 1), जबकि ssh -2बलों ssh कोशिश करने के लिए आरएसए या DSA केवल कुंजियों (प्रोटोकॉल संस्करण 2)। नीचे दिए गए उदाहरणों में, हम रिमोट होस्ट पर RSA1 और DSA कुंजियों को उत्पन्न और स्थापित करते हैं जैसे कि आपके पास अधिक लचीलापन है। आप अपनी .sshनिर्देशिका में लाइन के साथ एक विन्यास फाइल बना सकते हैं

Protocol 1,2

इस बनाता है ssh एक कोशिश RSA1 (प्रोटोकॉल संस्करण 1) से पहले कनेक्शन आरएसए / DSA (प्रोटोकॉल संस्करण 2)।

RSA1 कुंजी का उपयोग करना

remote=user@remotehost   # fill in correct user and remotehost names
cd $HOME/.ssh
# create .ssh on remote host if it is non-existing:
ssh $remote 'if [ ! -d .ssh ]; then mkdir .ssh; fi' 
# copy RSA1 key: 
scp identity.pub ${remote}:.ssh
ssh $remote "cd .ssh; cat identity.pub >> authorized_keys"

DSA कुंजियों का उपयोग करना

remote=user@remotehost   # fill in correct user and remotehost names
cd $HOME/.ssh
# create .ssh on remote host if it is non-existing:
ssh $remote 'if [ ! -d .ssh ]; then mkdir .ssh; fi' 
# copy DSA key: 
scp id_dsa.pub ${remote}:.ssh
ssh $remote "cd .ssh; cat id_dsa.pub >> authorized_keys2"

यह सब आपको करना है अगर आपने चाबियाँ बनाते समय पासफ़्रेज़ का उपयोग नहीं किया है। आप ssh $ रिमोट चलाकर कनेक्शन का परीक्षण कर सकते हैं और देख सकते हैं कि क्या आप पासवर्ड दिए बिना लॉग इन कर सकते हैं (आपको उपयोग करने की आवश्यकता हो सकती है -1या ssh के-2 विकल्प के रूप में )। प्रक्रिया, निश्चित रूप से, उस मशीन के लिए दोहराया जा सकता है जिसे आप लॉग ऑन करना चाहते हैं।

यदि आपने पासफ़्रेज़ का उपयोग किया है, तो आपको ssh-agentएक विशेष शेल शुरू करने के लिए कार्यक्रम चलाना होगा , इसके बाद ssh-addअपने कुंजी / पासफ़्रेज़ संयोजन को पंजीकृत करना होगा sshd। अधिक जानकारी के लिए इन कार्यक्रमों के लिए मैन पेज देखें।

पासवर्ड-मुक्त कनेक्शन को स्वचालित करने के लिए एक स्क्रिप्ट: ssh-no-password.sh

#!/bin/sh

# create ssh connections without giving a password

if [ $# -lt 1 ]; then
  echo Usage: $0 username@remotehost
  exit
fi
remote="$1"  # 1st command-line argument is the user@remotehost address
this=$HOST   # name of client host

# first check if we need to run ssh-keygen for generating
# $HOME/.ssh with public and private keys:
if [ ! -d $HOME/.ssh ]; then
  echo "just type RETURN for each question:" # no passphrase - unsecure!!
  # generate RSA1, RSA and DSA keys:
  echo; echo; echo
  ssh-keygen
  echo; echo; echo
  ssh-keygen -t rsa
  echo; echo; echo
  ssh-keygen -t dsa
else
  # we have $HOME/.ssh, but check that we have all types of
  # keys (RSA1, RSA, DSA):
  if [ ! -f $HOME/.ssh/identity ]; then
     # generate RSA1 keys:
     echo "just type RETURN for each question:" # no passphrase - unsecure!!
     ssh-keygen
  fi
  if [ ! -f $HOME/.ssh/id_rsa ]; then
     # generate RSA keys:
     echo "just type RETURN for each question:" # no passphrase - unsecure!!
     ssh-keygen -t rsa
  fi
  if [ ! -f $HOME/.ssh/id_rsa ]; then
     # generate DSA keys:
     echo "just type RETURN for each question:" # no passphrase - unsecure!!
     ssh-keygen -t dsa
  fi
fi


cd $HOME/.ssh

if [ ! -f config ]; then
  # make ssh try ssh -1 (RSA1 keys) first and then ssh -2 (DSA keys)
  echo "Protocol 1,2" > config
fi

# copy public keys (all three types) to the destination host:

echo; echo; echo
# create .ssh on remote host if it's not there:
ssh $remote 'if [ ! -d .ssh ]; then mkdir .ssh; fi' 
# copy RSA1 key: 
scp identity.pub ${remote}:.ssh/${this}_rsa1.pub
# copy RSA key:
#scp id_rsa.pub ${remote}:.ssh/${this}_rsa.pub
# copy DSA key:
scp id_dsa.pub ${remote}:.ssh/${this}_dsa.pub
# make authorized_keys(2) files on remote host:

echo; echo; echo
# this one copies all three keys:
#ssh $remote "cd .ssh; touch authorized_keys authorized_keys2; cat ${this}_rsa1.pub >> authorized_keys; cat ${this}_rsa.pub >> authorized_keys2; cat ${this}_dsa.pub >> authorized_keys2;"
# this one copies RSA1 and DSA keys:
ssh $remote "cd .ssh; touch authorized_keys authorized_keys2; cat ${this}_rsa1.pub >> authorized_keys; cat ${this}_dsa.pub >> authorized_keys2;"

echo; echo; echo
echo "try an ssh $remote"

से कॉपी किया गया: http://folk.uio.no/hpl/scripting/doc/ssh-no-password.html


1

मैं उन लोगों के लिए एक उत्तर जोड़ना चाहूंगा जो पा सकते हैं कि उन्हें पासवर्ड दर्ज करना चाहिए, यहां तक ​​कि उन्होंने यहां सभी उत्तर भी पढ़े हैं क्योंकि आपने IdentitiesOnly को हां के रूप में सेट किया है। और यहां उत्तर आपको कई कुंजियों को प्रबंधित करने के लिए बहुत समय बचा सकता है, जो गिट या सर्वर के लिए कुंजी है।

जब मैंने कुंजी जेनरेट की और उसे सर्वर पर कॉपी किया:

ssh-keygen  # change the file to /home/yourname/.ssh/something
ssh-copy-id -i ~/.ssh/something.pub lerner@192.168.20.160

मैंने पाया कि यह काम नहीं किया।

फिर मैं ~/.ssh/configक्लाइंट पर फ़ाइल की जाँच करने के लिए गया , मैंने इसे सबसे नीचे देखा:

Host *
IdentitiesOnly yes

फिर मैं इसे ऊपर जोड़ता हूं:

Host somename
HostName 192.168.20.160
User lerner
IdentityFile ~/.ssh/something

मैं सिर्फ प्रवेश करके प्रवेश कर सकता हूं ssh somename

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

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

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