2009-10-27 13 views
14

मुझे एक कमांड चाहिए जो एक मशीन में sshes है, एक कमांड चलाता है (सीडी या स्क्रिप्ट या सु निष्पादित करता है), और फिर मुझे खोल देता है। एसएसएच को कमांड पास करना हमेशा बाहर निकलता प्रतीत होता है।एसएसएच कमांड के साथ .... प्लस शेल

मैं के लिए क्या देख रहा हूँ के कुछ उदाहरण: 'मुझे @ machine1 "./executeMyScript & & सीडी/developmentDirectory" ssh' और फिर इसे मुझे मेरे खोल देता है।

कारण मैं ऐसा करना चाहता हूं क्योंकि मैं mrxvt (tabbed x शब्द) का उपयोग कर रहा हूं जो मुझे स्टार्टअप पर निष्पादित करने के लिए मेरे सभी टैब के लिए कमांड को परिभाषित करने की अनुमति देता है। मैं एक ही मशीन के लिए कुछ एसएसएच कनेक्शन रखना चाहता हूं लेकिन उन्हें sshing के बाद अलग-अलग चीजें करना है।

-रोब

धन्यवाद!

उत्तर

10

रूपांतर वास्तव में, छद्म tty आवंटन के लिए मजबूर करने ssh का आयकर विकल्प का उपयोग:

ssh -t [email protected] ./executeMyScript '&&' bash -i 
+0

धन्यवाद! पहले निरीक्षण पर, यह ठीक वैसे ही काम करता है जैसा मैं चाहता हूं! "-t" के लिए Hurray! – robarson

+0

भले ही इस प्रश्न का उत्तर उचित रूप से दिया गया हो, भले ही कोई पढ़ रहा हो, क्या आप जानते हैं कि मैं इस कमांड के साथ शुरू होने वाले बैश का उदाहरण कैसे प्राप्त कर सकता हूं (ताकि जब मैं emacs को बंद कर दूं, तो यह मेरे बैश टर्मिनल पर वापस आ जाए) ? बिल्ली .. कुछ भी जो बैश के बिना emacs खुलता है अच्छा होगा (जैसे कि emacs शुरू करने के तुरंत बाद बाहर नहीं निकलता है)। – robarson

4

कैसे

के बारे में
ssh [email protected] ./executeMyScript '&&' bash -i 

आप && तो यह बजाय रिमोट मशीन को दे दिया जाएगा स्थानीय शेल द्वारा निगल लिया उद्धृत करने के लिए किया है।

उद्धरण एक ';' चरित्र और यदि आप अपना प्रारंभ निर्देशिका भी बदल सकते हैं:

bash -li 

कि बैश शुरू होता है:

ssh [email protected] ./executeMyScript '&&' cd /developmentDirectory ';' bash -i 
+0

धन्यवाद। काम करने के लिए कॉल काम किया ...infosar के रूप में यह मुझे एक खोल दिया। दुर्भाग्यवश यह बहुत अच्छी तरह से काम नहीं करता है .. सरल कीबोर्ड शॉर्टकट जैसे कि ctrl^a काम नहीं करता जिसका मतलब है कि मुझे एक अलग समाधान खोजने और खोजने की आवश्यकता है। बीटीडब्ल्यू, यह भी प्रिंट करता है "बैश: इस खोल में कोई नौकरी नियंत्रण नहीं"। – robarson

+3

'-t' विकल्प के साथ प्रयास करें:' ssh -t me @ machine ... ' – mob

2
इस तरह

रखो कुछ स्क्रिप्ट के अंत में आप चलाना चाहते हैं एक इंटरैक्टिव लॉगिन खोल के रूप में। यह सही नहीं है, क्योंकि आप TERM अग्रेषण जैसी चीज़ों पर अनुपलब्ध होंगे, लेकिन यह आपकी आवश्यकताओं के लिए पर्याप्त हो सकता है।

यदि यह पर्याप्त नहीं है, मैं सिर्फ दो अलग-अलग ssh कॉल एक स्क्रिप्ट चलाने के लिए बनाने चाहते हैं, और किसी अन्य रूप में मुझे प्रवेश करने के लिए।

+0

+1 दो अलग ssh कमांड के लिए। KISS –

2

कैसे ssh_config में SendEnv विकल्प का उपयोग कर एक विशेष वातावरण भेजने के लिए के बारे में रिमोट होस्ट की कॉन्फ़िगरेशन में उस पर्यावरण परिवर्तक की जांच करके आपकी स्थानीय मशीन से आपकी रिमोट मशीन पर विकल्प का पालन किया गया है?

अपने .ssh/विशेष-config फ़ाइल में:

remotehost: 
    SendEnv * 

अपने स्थानीय स्क्रिप्ट:

RUN_THIS_FIRST_COMMAND=blah 
ssh -F special-config-file 

आपका रिमोट .bash_profile:

if [ "$RUN_THIS_FIRST_COMMAND" != "" ] ; then 
    $RUN_THIS_FIRST_COMMAND 
fi 

आपको यह देखना होगा की आवश्यकता हो सकती इन पंक्तियों में से कुछ, मैंने इसे मैन पेजों से एक साथ फेंक दिया और इससे पहले किसी भी कोशिश नहीं की है। व्यक्तिगत रूप से मुझे इस समाधान के लिए अपने स्थानीय और दूरस्थ वातावरण दोनों को संशोधित करना पसंद नहीं है। अन्य उत्तर पर

0

यह मेरे लिए काम करता है।

/usr/bin/ssh -t yourdomain.com "cd /directory; bash -i" 
+2

यह आपके लिए क्यों काम करता है? थोड़ी अधिक जानकारी दें ताकि ओपी समझ सके कि आपने जो लिखा है वह आपने क्यों लिखा था। – rayryeng

+1

यह 4 साल पहले पोस्ट किए गए मौजूदा चुने गए उत्तर की एक कम या कम प्रत्यक्ष प्रति है ... – Synchro

+0

एक स्पष्टीकरण अच्छा होगा। –

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