शेल स्क्रिप्ट एक ssh सर्वर में लॉग इन करने के लिए


29

मैंने एक शेल स्क्रिप्ट लिखने की कोशिश की जो स्क्रिप्ट का उल्लेख करते हुए पासवर्ड का उपयोग करके एक ssh सर्वर में स्वचालित लॉगिन कर सकती है। मैंने निम्नलिखित कोड लिखा है:

set timeout 30
/usr/bin/ssh -p 8484 root@172.31.72.103
expect 
{
   "root@172.31.72.103's password" 
   {
      send "password\r" 
   }
}

यह कोड ठीक से नहीं चल रहा है, फिर भी यह पासवर्ड के लिए पूछ रहा है। क्या कोई इसे हल करने में मेरी मदद कर सकता है



जवाबों:


36

मैंने एक बार expectssh सर्वर में लॉग इन करने के लिए एक स्क्रिप्ट लिखी थी (जैसे आपका मामला) और मेरी स्क्रिप्ट कुछ इस तरह थी:

#!/usr/bin/expect

spawn ssh MyUserName@192.168.20.20
expect "password"
send "MyPassword\r"
interact

मुझे लगता है कि शायद interactआपकी स्क्रिप्ट में याद आ रही है।


यह मेरे लिए बिल्कुल ठीक काम कर रहा है और मैं इस जगह पर अटका हुआ हूं, इंटरैक्शन प्रॉम्प्ट के साथ इंटरैक्टिव टर्मिनल प्रदान करता है, लेकिन मैं आगे और अधिक कदमों को स्वचालित करने की कोशिश कर रहा हूं cdऔर lsफाइल की सामग्री को भी पढ़ता हूं । क्या बातचीत के बाद ऐसा करना संभव है? कृपया जवाब दें
हंसियामिथुन

@ हंसी आप lsलॉगिन के बाद एक कमांड भेज सकते हैं । उदाहरण के लिए, पासवर्ड भेजने के बाद, expectकमांड प्रॉम्प्ट टेक्स्ट (यह सुनिश्चित करने के लिए कि आप लॉग इन हैं) के साथ करें, फिर send "ls\r"। इन सब से पहले जाता है interact
सईदीन

प्रश्न थोड़ा गलत था और मुझे ls करने और सामग्री पढ़ने के बाद खेद है, मैं इसे प्रिंट करने में सक्षम हूं। लेकिन स्थानीय मशीन से उपयोग करने के लिए एक चर में ssh सत्र से कैसे प्राप्त करें। रेफरी: stackoverflow.com/questions/32341234/expect-script-return-value । लेकिन आउटपुट मेरे लिए काम नहीं कर रहा है। मेरा प्रश्न पोस्ट किया गया: stackoverflow.com/questions/51628465/… । मुझे file_listस्थानीय कमांड प्रॉम्प्ट से निकलने के बाद बाहर निकलने की आवश्यकता है
हंसियामिथुन

31

आप इसके बारे में गलत तरीके से जा रहे हैं। आप जो करना चाहते हैं वह एक पासवर्डलेस ssh-key युग्म उत्पन्न करता है और फिर (जब तक सर्वर RSA कुंजी प्रमाणीकरण का समर्थन करता है) आप सभी के लिए पासवर्ड टाइप किए बिना प्राप्त कर सकते हैं। यह एक सुरक्षा जोखिम है यदि आपकी निजी कुंजी कहीं संग्रहीत की जाती है तो उसे चुराया जा सकता है।

इन कदमों का अनुसरण करें:

  1. mkdir -p ~/.ssh
  2. cd ~/.ssh
  3. ssh-keygen -type dsa -i mysshkeys
  4. Returnपासफ़्रेज़ के लिए संकेत मिलने पर दबाएँ
  5. Returnपुष्टि करने के लिए दूसरी बार दबाएँ ।

अब आपकी ~/.sshनिर्देशिका में दो फाइलें होंगी , mysshkey.pubऔर mysshkeymysshkey.pubआपकी सार्वजनिक कुंजी है, यह रिमोट सर्वर पर डालने के लिए सुरक्षित है। mysshkeyआपकी निजी पासवर्ड रहित कुंजी है, यह रिमोट सर्वर पर डालने के लिए सुरक्षित नहीं है (या कहीं और किसी को कॉपी मिल सकती है)।

सर्वर पर आप SSH की इच्छा रखते हैं:

  1. रिमोट सर्वर पर लॉगिन करें
  2. mkdir -p ~/.ssh
  3. कॉपी और पेस्ट की सामग्री mysshkey.pubमें~/.ssh/authorized_keys
  4. सुनिश्चित करें कि ~/.ssh/authorized_keysहै chmod'घ के लिए600

अब, इसे अपने स्थानीय मशीन पर कार्रवाई करने के लिए आप निम्नलिखित कमांड चलाते हैं:

ssh -i ~/.ssh/mysshkey <remote_server_ip>

और आपको पासवर्ड के लिए संकेत दिए बिना लॉग इन किया जाएगा।

यह स्वचालित लॉगिन को प्रबंधित करने का एक बहुत बेहतर तरीका है क्योंकि आप अपने पासवर्ड को कई स्थानों पर हार्ड-कोडिंग नहीं करते हैं जिन्हें कभी भी बदलने पर आपको अपडेट करने की आवश्यकता होती है।


2
मैं डीएसए के बजाय आरएसए कुंजी का उपयोग करूंगा। लेकिन इसके अलावा, पूर्ण सहमत हैं।
ग्लोगल

12
कभी-कभी आप दूरस्थ होस्ट, जैसे नेटवर्क उपकरणों में चाबियाँ नहीं जोड़ सकते।
डार्कहार्ट

1
मैंने यह कोशिश की। ssh अभी भी पासवर्ड मांग रहा है। क्या आपको विशेष रूप से एक आईपी एड्रेस देना है? मैंने इसे दोनों <user> @ <domain-name> और सिर्फ डोमेन नाम के साथ आज़माया।
Jay Bienvenu

इस कमांड ने कहा कि बहुत सारे तर्क हैं? (चरण 3 के लिए)
जोसेफ एस्ट्रान

मुझे ssh-keygen -t dsa में बदलना पड़ा और इसके बजाय मैन्युअल रूप से फ़ाइल स्थान दर्ज करना पड़ा।
जोसेफ एस्ट्राहन

20

डेबियन-आधारित वितरण पर, sshpassपैकेज आपको जो चाहते हैं उसे करने का एक आसान तरीका प्रदान करता है। पैकेज कई अन्य लोकप्रिय वितरणों के लिए उपलब्ध है। आपको इसे पहले सेट करने की आवश्यकता है:

echo 'YourPassword' > passwordFile.txt
chmod 600 passwordFile.txt

फिर इस तरह से स्क्रिप्ट से SSH कमांड मंगाएँ:

sshpass -f /path/to/passwordFile.txt /usr/bin/ssh -p 8484 root@172.31.72.103

यह अधिक लचीलापन प्रदान करता है, जैसे कि आप एक अलग स्थान का उपयोग कर रहे हैं या समाधान का उपयोग करने की तुलना में पासवर्ड को बदलने की आवश्यकता है expect


7

सबसे पहले sshPass को इनस्टॉल करें sudo apt-get install sshpass

फिर के रूप में एक उपनाम .bashrc फ़ाइल बनाएँ

alias sshLogin='sshpass -p <your ssh password> ssh username@remote_host'

अब अपनी परिवर्तित .bashrc फ़ाइल को पुनः लोड करें source ~/.bashrc

अब तुम हो गए।

अब आप sshLoginटर्मिनल में उपर्युक्त निर्मित उपनाम का उपयोग करके ssh चला सकते हैं ।



2

हैश कीज बनाने और इसे अपने पीसी पर सहेजने के लिए आपको जो कुछ भी चाहिए वह सब

बस टाइप करो

ssh-keygen -t rsa -b 4096 # just press Enter till the end

फिर दर्ज करें

ssh-copy-id <user>@<server>

फिर सामान्य रूप से लॉगिन करें

ssh <user>@<server>

अब आपको पासवर्ड की आवश्यकता नहीं है

नोट: एक सादे पाठ में अपना पासवर्ड सहेजना खतरनाक है

यह विधि 4096 की सार्वजनिक कुंजी के साथ RSA का उपयोग करके आपके पासवर्ड का हैशेड मान बना रही है जो बहुत सुरक्षित है।


1
यह इस उत्तर का दोहराव प्रतीत होता है ।
रोइमा

#roaima हाँ, लेकिन यह अहंकार अविश्वसनीय रूप से उपयोगी ssh-copy-idकमांड का सुझाव देता है , जिसका किसी और ने उल्लेख नहीं किया है। मैं उसके लिए इसे उभार रहा हूं।
Huw Walters

1

SSH पासवर्डलेस लॉगिन 5 आसान चरणों में SSH Keygen का उपयोग :

पर्यावरण सेटअप: यहां छवि विवरण दर्ज करें

चरण 1: प्रमाणीकरण SSH-Kegen Keys पर - (192.168.0.12)
पहले उपयोगकर्ता के साथ सर्वर 192.168.0.12 में लॉगिन करें और निम्नलिखित कमांड का उपयोग करके सार्वजनिक कुंजी की एक जोड़ी उत्पन्न करें।

यहां छवि विवरण दर्ज करें

चरण 2: बनाएँ .ssh निर्देशिका पर - 192.168.0.11
सर्वर 192.168.0.12 से SSH का उपयोग करें सर्वर 192.168.0.11 को जोड़ने के लिए। इसके अंतर्गत .sh निर्देशिका बनाने के लिए, निम्न कमांड का उपयोग करके।

यहां छवि विवरण दर्ज करें

चरण 3: जनरेटेड सार्वजनिक कुंजी अपलोड करें - 192.168.0.11
सर्वर 192.168.0.12 से SSH का उपयोग करें और सर्वर 192.168.0.11 पर नई जनित सार्वजनिक कुंजी (id_rsa.pub) .sshको एक फ़ाइल नाम अधिकृत_की के रूप में उपयोगकर्ता की निर्देशिका में अपलोड करें।

यहां छवि विवरण दर्ज करें

चरण 4: सेट अनुमतियाँ - 192.168.0.11
सर्वर पर विभिन्न SSH संस्करणों के कारण, हमें .sshनिर्देशिका और authorized_keysफ़ाइल पर अनुमतियाँ सेट करने की आवश्यकता है ।

यहां छवि विवरण दर्ज करें

चरण 5: 192.168.0.12 से 192.168.0.11 सर्वर पर पासवर्ड के बिना लॉगिन करें
अब से हम 192.168.0.11 में लॉग इन कर सकते हैं। सर्वर से शीना उपयोगकर्ता के रूप में 192.168.0.12 बिना पासवर्ड के tecmint उपयोगकर्ता के रूप में लॉग इन कर सकते हैं।

यहां छवि विवरण दर्ज करें


धन्यवाद ... यह मेरे लिए काम कर गया, चरण 4 को छोड़कर मुझे एक नाटकीय "चेतावनी" मिली: "UNPROTECTED PRIVING KEY FILE! ... ... / ssh / id_rsa 'बहुत खुले हैं। ... निजी कुंजी होगी नजरअंदाज कर दिया ... खराब अनुमति "। मैंने chmod 700 id_rsaडायरेक्टरी में किया था । एसएचएस इन लोकल (क्लाइंट, यानी 192.168.0.12 आपके उदाहरण में) सर्वर: समस्या हल हुई
माइक कृंतक


1

जैसा कि पहले से ही अन्य उत्तरों में वर्णित है, मैं भी उपयोग करता sshpassहूं लेकिन मैं इसे readअस्थायी पर्यावरण चर में अपना पासवर्ड स्टोर करने के लिए कमांड के साथ जोड़ देता हूं। इस तरह मेरा पासवर्ड कभी भी स्पष्ट नहीं लिखा गया है। यहाँ एक लाइन कमांड है जिसका मैं उपयोग करता हूं:

read -s PASS; sshpass -p $PASS ssh <user>@<host adress>

उसके बाद आपको अपना पासवर्ड डालना होगा (स्क्रीन पर कुछ भी नहीं दिखाई देगा) और फिर एंटर दबाने पर कनेक्शन खुल जाएगा।


0

मैंने हाल ही में यह किया है, इससे आपको मदद मिल सकती है:

sshpass -p 'password' username@ipaddress

यदि यह काम नहीं करता है, तो आपको उस दूसरी मशीन में कुंजी उत्पन्न करनी होगी जिसे आप कनेक्ट करना चाहते हैं

ssh-keygen

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

cd .ssh/
mv id_rsa.pub authorized_keys
useradd -d /home/username username

यह उपयोगकर्ता को अब सूची में जोड़ने के लिए घर निर्देशिका में जाएगा और अनुमति देगा और sshd सेवाओं को पुनः आरंभ करेगा

chmod 700 /home/username/.ssh
chmod 644 /home/username/.ssh/authorized_keys
chown root:root /home/dozee
sudo service sshd restart

अब आपको उस स्थान पर सिस्टम में निजी कुंजी को स्थानांतरित करना होगा जहां से आप ssh कमांड को चलाने जा रहे हैं, तब आप इसके साथ जुड़ सकते हैं

sshpass -p 'password' ssh -i id_rsa username@ip

अगर वह भी काम नहीं करता है, तो / etc / ssh खुले sshd_config को vim editor check के साथ जाएं, अगर pubkeyAuthenticatoin को हाँ या नहीं में बदल दिया जाए, यदि इसे हाँ में नहीं बदला जाए, तो sshd सेवाओं को पुनरारंभ करें और फिर इसे आज़माएँ, यह निश्चित रूप से काम करेगा ।


0

पहला तर्क होस्टनाम है और दूसरा पासवर्ड है।

     #!/usr/bin/expect
     set pass [lindex $argv 1]
     set host [lindex $argv 0]
     spawn ssh -t root@$host echo Hello
     expect "*assword: "
     send "$pass\n";
     interact

निष्पादन: ./script.expect

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