मैं हर समय पासवर्ड दर्ज किए बिना ssh के माध्यम से रिमोट में लॉगिन करने में सक्षम होना चाहता हूं।
- मैं इसे किस तरह से सेट अप करूं?
- क्या पासवर्ड-कम सत्र को निष्पादित करने के लिए एक अलग कमांड की आवश्यकता है?
मैं हर समय पासवर्ड दर्ज किए बिना ssh के माध्यम से रिमोट में लॉगिन करने में सक्षम होना चाहता हूं।
जवाबों:
इस आदेश को निष्पादित करें:
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 कीपर उत्पन्न करने की आवश्यकता होगी जो आपको पासवर्ड का उपयोग किए बिना आपको स्वयं के रूप में पहचानने की अनुमति देगा। आप चाहें तो पासकोड वाली चाबियों को सुरक्षित रखने का विकल्प चुन सकते हैं, लेकिन यह पूरी तरह से पासवर्ड-लेस एसएसएच एक्सेस की अनुमति देकर खाली छोड़ा जा सकता है।
ssh-keygen
बनाएं । फ़ाइल क्या सर्वर पर चला जाता है, निजी कुंजी (है ) क्या आप के साथ रहता है और आप अपने आप को कैसे की पहचान है।id_rsa
id_rsa.pub
pub
id_rsa
ssh-copy-id user@server
दूरस्थ उपयोगकर्ता और मशीन DNS नाम या आईपी पते के साथ उपयोगकर्ता को बदलने के साथ अपने सर्वर पर कॉपी करें । यह आपके SSH पासवर्ड के लिए संकेत देगा, इसे दर्ज करें और यदि सभी सफलतापूर्वक पूरा हो जाता है तो आप ssh user@server
पासवर्ड की आवश्यकता के बिना मशीन का उपयोग कर पाएंगे ।ssh-keygen
स्क्रीन पर निर्देशों का पालन करें, फिर टाइप ssh-copy-id user@server
रिमोट मशीन के साथ अपने दूरस्थ उपयोगकर्ता और सर्वर के साथ उपयोगकर्ता की जगह
ssh-copy-id "not-marco@127.0.0.1 -p 1234"
:।
जिस तरह से मैं आमतौर पर ऐसा करता हूं वह इस प्रकार है:
ssh-keygen -t rsa
(जब पासवर्ड के लिए कहा जाए, तो इसे खाली छोड़ दें)
फिर:
cat ~/.ssh/id_rsa.pub | ssh username@hostname 'cat >> .ssh/authorized_keys'
(इसके लिए फ़ोल्डर को .ssh को लक्षित hostname पर होम डायरेक्टरी में होना चाहिए, इसमें अधिकृत_की फ़ाइल के साथ)
बेशक, उपयोगकर्ता नाम को वांछित उपयोगकर्ता नाम और होस्टनाम को वांछित होस्टनाम या आईपी पते से बदलें
उसके बाद, बस उस बॉक्स के लिए SSH की तरह आप करने के लिए इस्तेमाल कर रहे हैं।
touch
और chmod
कमांड के बारे में क्या ?
.ssh/authorized_keys
0600 के लिए फ़ाइल या इस काम नहीं करेगा
मैं सामान्य रूप से इसके लिए उपयोग करता हूं sshpass
, इसे स्थापित करता हूं sudo apt-get install sshpass
और इसे इस तरह से उपयोग करता हूं
sshpass -p 'password' ssh your_username@your_server
sshpass
उन मामलों में बहुत उपयोगी हैक है जब आप दूरस्थ सर्वर पर प्रमाणीकरण विधि को बदल नहीं सकते हैं!
पासवर्ड प्रमाणीकरण अक्षम करें
क्योंकि एसएसएच सर्वर वाले बहुत से लोग कमजोर पासवर्ड का उपयोग करते हैं, कई ऑनलाइन हमलावर एसएसएच सर्वर की तलाश करेंगे, फिर यादृच्छिक पर पासवर्ड का अनुमान लगाना शुरू करेंगे। एक हमलावर एक घंटे में हजारों पासवर्ड की कोशिश कर सकता है, और पर्याप्त समय दिए गए सबसे मजबूत पासवर्ड का भी अनुमान लगा सकता है। अनुशंसित समाधान पासवर्ड के बजाय SSH कुंजी का उपयोग करना है। एक सामान्य SSH कुंजी के रूप में अनुमान लगाने के लिए कठिन होने के लिए, एक पासवर्ड में 634 यादृच्छिक अक्षर और संख्याएं होनी चाहिए। यदि आप हमेशा SSH कुंजी के साथ अपने कंप्यूटर में लॉग इन कर पाएंगे, तो आपको पासवर्ड प्रमाणीकरण को पूरी तरह से अक्षम कर देना चाहिए।
यदि आप पासवर्ड प्रमाणीकरण अक्षम करते हैं, तो यह केवल उन कंप्यूटरों से कनेक्ट करना संभव होगा जिन्हें आपने विशेष रूप से अनुमोदित किया है। यह आपकी सुरक्षा में बड़े पैमाने पर सुधार करता है, लेकिन पीसी को पूर्व-अनुमोदित किए बिना, या जब आप गलती से अपनी कुंजी को हटा देते हैं, तो बिना किसी मित्र के पीसी से अपने स्वयं के कंप्यूटर से कनेक्ट करना आपके लिए असंभव बना देता है।
जब तक आपके पास कोई विशिष्ट कारण न हो, तब तक पासवर्ड प्रमाणीकरण अक्षम करने की अनुशंसा की जाती है।
पासवर्ड प्रमाणीकरण को अक्षम करने के लिए, अपनी sshd_config फ़ाइल में निम्न पंक्ति देखें:
#PasswordAuthentication yes
इसे इस तरह दिखने वाली लाइन से बदलें:
PasswordAuthentication no
एक बार जब आप फ़ाइल को सहेज लेते हैं और अपने SSH सर्वर को फिर से शुरू करते हैं, तो जब आप लॉग इन करते हैं तो आपसे पासवर्ड भी नहीं पूछा जाना चाहिए।
https://help.ubuntu.com/community/SSH/OpenSSH/Configuring#disable-password-authentication
PasswordAuthentication no
सभी उपयोगकर्ताओं को प्रभावित करता है ? यदि नहीं, तो मैं इसे सामान्य उपयोगकर्ताओं के लिए कैसे बंद कर दूं लेकिन इसे परीक्षण करते समय रूट के लिए अपरिवर्तित छोड़ दूं? मैं वास्तव में इसे नाकाम नहीं करना चाहता हूं और खुद को पूरी तरह से बंद कर देना चाहता हूं।
Permission denied (publickey).
है PasswordAuthentication no
। मुझे क्या करना चाहिए? क्या मैं PasswordAuthentication no
दूसरे होस्ट पर बदल सकता हूं ?
यह समाधान उपयोगकर्ताओं प्रयोग करने के लिए विशेष रूप से है विंडोज के लिए ssh पर बादल छवियों सहित उनके रिमोट मशीनों में एडब्ल्यूएस बादल और GCE बादल
हाल ही में इस समाधान का उपयोग GCE पर दूरस्थ लॉगिन नई तैनात vm छवियों के लिए किया गया।
puttygen
puttygen डाउनलोड करेंwinscp
wincp डाउनलोडयदि आपके पास एक निजी कुंजी है:
puttygen
लोड बटन खोलें , खोलें और अपनी निजी कुंजी ( *.pem
) फ़ाइल चुनें।
यदि आपके पास निजी कुंजी नहीं है:
puttygen
,(स्रोत 1 से, नीचे दिया गया लिंक)
notepad
)"सार्वजनिक कुंजी को OpenSSH अधिकृत_की फ़ाइल में चिपकाने के लिए" से अपने सार्वजनिक कुंजी डेटा को कॉपी करें और पुट्टी कुंजी जनरेटर के अनुभाग में जाएं, और कुंजी डेटा को authorized_keys
फ़ाइल में पेस्ट करें ।
सुनिश्चित करें कि इस फ़ाइल में पाठ की केवल एक पंक्ति है।
दूरस्थ मशीन पर होम निर्देशिका में अधिकृत_कील्स फ़ाइल अपलोड करें।
.ssh
निर्देशिका बनाएं (यदि मौजूदा नहीं है)
निर्देशिका के authorized_keys
लिए फ़ाइल की प्रतिलिपि बनाएँ .ssh
।
(यह किसी भी मौजूद authorized_keys
फ़ाइल को बदल देगा , इस पर ध्यान दें)।
यदि फ़ाइल मौजूद है, तो मौजूदा फ़ाइल में इस फ़ाइल की सामग्री जोड़ें।
अनुमतियाँ सेट करने के लिए आदेश चलाएँ:
sudo chmod 700 .ssh && chmod 600 .ssh/authorized_keys
अब आप ssh
हर बार क्रेडेंशियल दर्ज किए बिना रिमोट मशीन में जा सकेंगे ।
यदि आप एक सार्वजनिक / प्रीपेट कीपर बनाते हैं और हमारी नई बनाई गई सार्वजनिक कुंजी का उपयोग करने में लॉग इन करते हैं, तो आपको अपना पासवर्ड टाइप करने की आवश्यकता नहीं होगी। आपके की-रिंग और / या ssh एजेंट के कॉन्फ़िगरेशन के आधार पर आपको पासफ़्रेज़ के साथ अपनी कुंजी को सुरक्षित रखने की आवश्यकता हो सकती है।
यहाँ आप के लिए कई लघु एस में से एक है । इस विधि की सुरक्षा के लिए यह महत्वपूर्ण महत्व है, कि उत्पन्न निजी कुंजी निजी रहती है! आपको इसे कभी भी किसी के साथ साझा नहीं करना चाहिए या किसी भी क्षमता में इसका उपयोग करने की अनुमति नहीं देनी चाहिए।
इस आदेश में एक काफी मजबूत कुंजी उत्पन्न करता है ~/.ssh/
:
ssh-keygen -b 4096
में ~/.ssh/
आप के रूप में अपने सार्वजनिक कुंजी मिलेगा id_rsa.pub
। इसकी सामग्री को authorized_keys
ट्रांसपोर्टेबल मीडिया (पेन ड्राइव) के माध्यम से या सर्वर पर पासवर्ड प्रमाणीकरण को शीघ्र ही सक्षम करके, फिर इसका उपयोग करके ssh-copy-id ~/.ssh/id_rsa.pub username@server
और फिर इसे अक्षम करके आपकी सर्वर फ़ाइल में जोड़ा जाना चाहिए ।
यदि आपने पासफ़्रेज़ (पहले चरण में) के साथ अपनी कुंजी को सुरक्षित करने के लिए चुना है, ssh-agent
तो आप उस चरण को स्थानीय रूप से सुरक्षित करने के लिए उबंटू कीरिंग का उपयोग या उपयोग कर सकते हैं ताकि आपको हर समय इसे टाइप न करना पड़े।
कुछ अतिरिक्त बनाने के लिए:
मैक डिफ़ॉल्ट रूप से नहीं है 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"
ध्यान दें कि उद्धरण आवश्यक हैं।
अनुप्रयोगों ssh
और scp
दूरस्थ लॉगिन और दूरस्थ प्रतिलिपि के लिए, क्रमशः, आपको पासवर्ड दिए बिना एक दूरस्थ होस्ट के साथ संवाद करने की अनुमति देता है। इसके लिए आवश्यक है कि आप नीचे बताई गई तरह एक प्रमाणीकरण प्रक्रिया का पालन करें। क्लाइंट से हमारा मतलब है कि मशीन आपके द्वारा बैठी हुई है और सर्वर से हमारा मतलब है कि मशीन जिसे आप पासवर्ड दिए बिना लॉग ऑन करना चाहते हैं। प्रमाणीकरण प्रक्रिया के चरण हैं:
$HOME/.ssh
।$HOME/.ssh/authorized_keys
या $HOME/.ssh/authorized_keys2
सर्वर पर लागू करें।प्रमाणीकरण प्रोटोकॉल के तीन अलग-अलग प्रकार हैं। आप ssh-keygen चलाते समय प्रकार निर्दिष्ट करते हैं:
chmod 0700
यह सुनिश्चित करना चाहिए कि यह फ़ाइल दूसरों के लिए पठनीय नहीं है) और पहचान । पब (सार्वजनिक कुंजी)।ssh-keygen -t rsa
फाइलों में चल रहा है और परिणाम id_rsa
(निजी कुंजी) और id_rsa.pub
(सार्वजनिक कुंजी) द्वारा प्राप्त किया गया है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)।
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"
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
मैं उन लोगों के लिए एक उत्तर जोड़ना चाहूंगा जो पा सकते हैं कि उन्हें पासवर्ड दर्ज करना चाहिए, यहां तक कि उन्होंने यहां सभी उत्तर भी पढ़े हैं क्योंकि आपने 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 सर्वर का आईपी है; उपयोगकर्ता उपयोगकर्ता नाम है जिसे आप सर्वर में लॉग इन करते हैं; और आइडेंटिफ़ाइल वह फ़ाइल है जहाँ आप अपने द्वारा की गई कुंजी को स्टोर करते हैं।