2013-04-03 5 views
9

मैं इस तरह एक कार्यक्रम है बनाने के लिए:कैसे SSH आदेश निष्पादन समयबाह्य करने

ssh -q [email protected] exit 
echo "output value -->$?" 

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

प्रश्न: उपर्युक्त कोड के लिए टाइमर को कैसे कार्यान्वित करें, और यदि यह उसी स्क्रीन में पासवर्ड के लिए पूछता है। और कुछ त्रुटि कोड

2) जब मैं ऊपर कोड निष्पादित, मैं प्राप्त निम्नलिखित त्रुटि कोड के साथ बाहर निकलें:

127 -- > I guess its for success 
225 -- > for any error. 

क्या कोई अन्य त्रुटि कोड से ऊपर के अलावा अन्य कर रहे हैं?

+0

http://www.eldos.com/documentation/sbb/documentation/ref_err_ssherrorcodes.html, एक लिंक मिला, – gmhk

+0

पासवर्ड प्रदान नहीं किए जाने पर बैंग आउट न करें और कुंजी आधारित ऑथ सेटअप नहीं है। स्क्रिप्ट की अपेक्षा करें। (टेम्पलेट स्क्रिप्ट के लिए Google/stackoverflow पर ssh + उम्मीद के लिए खोजें।) – anishsane

+4

उपयोग -o पासवर्ड प्रमाणीकरण = नहीं – Vorsprung

उत्तर

14

आप कमांड का उपयोग कर ssh पर कॉल को लपेट सकते हैं। timeout कमांड कोड 124 के साथ निकलता है यदि टाइमआउट होता है।

timeout 10s ssh -q [email protected] exit 
if [ $? -eq 124 ]; then 
    echo "Timeout out" 
fi 

या, Vorsprung आपके प्रश्न पर टिप्पणी की है के रूप में (के रूप में मैं आदमी पेज को देख रहा था!):

ssh -oPasswordAuthentication=no -q [email protected] exit 

इंटरैक्टिव पासवर्ड प्रमाणीकरण की अनुमति नहीं देंगे जो। आपको फिर बाहर निकलने के कोड की जांच करनी होगी।

+0

ssh -oPasswordAuthentication = no -q [email protected] मिलता है।238 बाहर निकलें -> यह – gmhk

+0

@gmhk काम करता है - उस उत्तर के लिए चेकमार्क पर क्लिक करना न भूलें जो आपको सबसे ज्यादा मदद करता है। – ghoti

2

ऐसा लगता है कि सवाल एक साथ कई होस्टों के खिलाफ 'बैच मोड' प्रसंस्करण के बारे में पूछ रहा है (उदाहरण के लिए, एक लूप में)। निम्नलिखित ssh कमांड विफल हो जाएगा यदि पीकेए किसी दिए गए होस्ट के लिए कॉन्फ़िगर नहीं किया गया है (सार्वजनिक कुंजी प्रमाणीकरण - "पासवर्ड-कम" लॉगिन मूल प्रश्न का उल्लेख करता है), इसलिए यह उन स्क्रिप्ट्स के लिए अच्छा है जिन्हें आप अभी भी जारी रखना चाहते हैं एक या दो मेजबान से जोड़ने की समस्याओं के बावजूद। यह पहले से अज्ञात मेजबानों के लिए "क्या आप निश्चित रूप से कनेक्ट करना जारी रखना चाहते हैं" के बारे में सभी प्रश्नों से परेशान नहीं होंगे (या आप इसके लिए ~/.ssh/config पर StrictHostKeyChecking no जोड़ सकते हैं)। उदाहरण के लिए,

for host in host1 host2 host3 # etc 
do 
    ssh -o BatchMode=yes -o StrictHostKeyChecking=no -o ConnectTimeout=5 \ 
     [email protected]$host 'uptime' || echo "problem: host=$host" 
done 

आप, अगर इन विकल्पों (BatchMode, ConnectTimeout) समर्थित हैं देखने के लिए अपने (ग्राहक) ssh आदमी पृष्ठ की जाँच करने के लिए, हालांकि होगा।

संबंधित मुद्दे