2009-12-13 7 views
43

मैं एक एसएसएच कनेक्शन बनाने की कोशिश कर रहा हूं और रिमोट सर्वर पर कुछ चीजों को स्क्रिप्ट के भीतर से कर रहा हूं।एक बैश स्क्रिप्ट के भीतर से ssh कैसे करें?

हालांकि टर्मिनल मुझे पासवर्ड के लिए संकेत देता है, फिर स्क्रिप्ट के बजाय टर्मिनल विंडो में कनेक्शन खोलता है। जब तक मैं कनेक्शन से बाहर नहीं निकलता तब तक आदेश निष्पादित नहीं होते हैं।

मैं बैश स्क्रिप्ट के भीतर से कैसे ssh कर सकता हूं?

उत्तर

53
  1. आप पासवर्ड संकेत दूर तो जाना कुंजी आधारित प्रमाणीकरण (described here) उपयोग करना चाहते हैं।

  2. दूर ssh से अधिक आदेशों को चलाने के लिए आप उन्हें एक तर्क निम्नलिखित की तरह ssh करने के लिए, के रूप में देना है:

जड़ @ मेजबान: ~ # ssh जड़ @ www 'ps -ef | grep apache | grep -v grep | WC -l '

+4

क्या होगा यदि मैं कई पंक्तियों (सिर्फ कोड स्पष्टता के लिए) है, मैं कैसे ssh करने के लिए पारित कर सकते हैं कि? – blong

+9

कमांड सेपरेटर के रूप में अर्धविराम का प्रयोग करें। 'सीडी/var/www; सीपी फू बार; ' – halfdan

+0

टूटी हुई लिंक फिक्स्ड। – halfdan

2

आपको जो करना है वह स्क्रिप्ट के रूप में उपयोगकर्ता के लिए एसएसएच कुंजी का आदान-प्रदान करना है। this tutorial

ऐसा करने के बाद, आपकी स्क्रिप्ट पासवर्ड दर्ज करने की आवश्यकता के बिना चलेगी। लेकिन, सुरक्षा के लिए, आप रूट उपयोगकर्ताओं के लिए ऐसा नहीं करना चाहते हैं!

14

आप पासवर्ड का उपयोग और नहीं कुंजी विनिमय का उपयोग तो आप के साथ ऐसा कर सकते हैं करने के लिए जारी रखना चाहते हैं' उम्मीद 'इसलिए की तरह: वहाँ अभी तक एक और तरीका है का उपयोग कर यह करने के लिए है

#!/usr/bin/expect -f 
spawn ssh [email protected] 
expect "password:" 
sleep 1 
send "<your password>\r" 
command1 
command2 
commandN 
3

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

# ~/.ssh/config 
ControlMaster auto 
ControlPath ~/.ssh/pool/%[email protected]%h 

तो आप लॉग इन करना, और जब तक आप लॉग इन हैं, bash स्क्रिप्ट ssh कनेक्शन को खोलने के लिए सक्षम हो जाएगा।

फिर आप काम करने से अपनी स्क्रिप्ट बंद कर सकते हैं जब कोई पहले से ही द्वारा चैनल नहीं खोला गया है:

ssh ... -o KbdInteractiveAuthentication=no .... 
संबंधित मुद्दे