Wednesday 15 August 2012

tcl - How to login to switch and execute commands if the prompt is varying? -


मेरे पास एक उम्मीद स्क्रिप्ट है:

  उम्मीद - "$ @" & lt; & lt; 'END_OF_FILE' उपयोगकर्ता नाम सेट [lindex $ argv 0] होस्ट सेट [lindex $ argv 1] सेट पासवर्डफ़ाइल [lindex $ argv 2] ​​सेट आदेश "[lindex $ argv 3]; \ r" सेट संकेत [lindex $ argv 4] # log_user 0 #exp_internal 1 अगर {[llength $ argv]! = 5} {"उपयोग: उपयोगकर्ता नामनामनाम पासवर्ड कमांड प्रॉम्प्ट" से बाहर निकलें 1} सेट फोर्स_कॉन्सरिवेटिव 0; # सेट रूढ़िवादी मोड को बाध्य करने के लिए, भले ही; # स्क्रिप्ट नहीं चला था मूल रूप से मूल रूप से यदि {$ force_conservative} {send_slow {1 .1} proc भेजें {ignore arg} {नींद .1 exp_send -s - $ arg}} # # कॉमेंट्स # सेंड कॉमांड्स फ़ंक्शन सभी पास दिए गए सभी आदेश भेजता है। सभी इसे पास किए जाने वाले आदेशों को अर्धविराम से अलग करना होगा और अंतिम सेट फ़ाइल में \ r डाल देना चाहिए [खुला "$ पासवर्डफ़ाइल" "आर"] proc SendCommands {कमानों} {वैश्विक प्रॉम लॉग लॉग इन करें foreach तत्व [विभाजन $ कमांड ";"] {अपेक्षित {-re $ प्रॉम्प्ट} {सेट करें - "$ तत्व \ r"}}}} सेट टाइमआउट 20 फोरेक होस्ट [विभाजन $ मेजबान "\"; ] {Spawn ssh -o "StrictHostKeyChecking no" "$ username @ $ host" match_max 1000000 सेट expect_out (बफर) {} अपेक्षित {timeout {send_user "\ n पासवर्ड प्रॉम्प्ट प्राप्त करने में विफल रहा \ n"; Exit 1} eof {send_user "\ n $ होस्ट के लिए $ SSH विफलता \ n"; बाहर निकलें 1} "* * उद्घोषणा: *" {प्रेषण - "[$ pfile पढ़ें] \ r" $ pfile की शुरुआत करें}}} {समय समाप्त {send_user "\ n लॉग इन गलत \ n"; Exit 1} eof {send_user "\ n $ होस्ट के लिए $ SSH विफलता \ n"; बाहर निकलें 1} -आर "$ प्रॉम्प्ट" {send - "\ r"}} सेट टाइमआउट 60 बंद करें "$ pfile" SendCommands "$ आदेश"} END_OF_FILE   

मैं इसे पसंद कर सकता हूँ :

  ./ scriptname उपयोगकर्ता नामनामनाम पासवर्ड पासवर्ड "commnmad1; commnad2; command3" "(। *।। * * Gt;) $"   

लेकिन अगर मैं सक्षम कमांड निष्पादित करके मोड बदलता हूं, मुझे सामान्य संकेत (# या & gt;) के बजाय पासवर्ड प्रॉम्प्ट मिलेगा I मैं कैसे सुनिश्चित कर सकता हूं कि नीचे दिए गए कोड को निष्पादित किया जाता है यदि कमांड है सक्षम या मुझे एक पासवर्ड प्रॉम्प्ट मिलता है।

  अपेक्षित {timeout {send_user "\ n प्राप्त करने में असफल पासवर्ड प्रॉम्प्ट \ n "; Exit 1} eof {send_user "\ n $ होस्ट के लिए $ SSH विफलता \ n"; से बाहर निकलें 1} "* * उद्घोषणा: *" {send - "[$ pfile] \ r" $ pfile की शुरुआत करें}}    

आप शायद चाहते हैं

  अपेक्षित {timeout {send_user" \ n पासवर्ड प्रॉम्प्ट प्राप्त करने में विफल रहा \ n "; Exit 1} eof {send_user "\ n $ होस्ट के लिए $ SSH विफलता \ n";   

मैंने जोड़ी गई <1 <"> " {send - "[read -nonewline $ pfile] \ r" $ pfile seek start exp_continue} $ prompt} कोड> -नोनलाइन विकल्प को पढ़ने के आदेश पर। जब आप पासवर्ड भेजते हैं, तो exp_continue आपको अपेक्षा रखता है कि "लूप" में अन्य स्थितियों में से एक को पूरा होने तक, प्रॉम्प्ट सहित।

No comments:

Post a Comment