आम तौर पर, यदि आप ऐसा करने के लिए एक आदेश पारित करते हैं
ssh me@example.com 'some-command.sh'
आपको एक गैर-संवादात्मक सत्र मिलता है, और जैसे ही कमांड (या स्क्रिप्ट, या जो भी) चलाया जाता है, वह बाहर निकल जाता है। मैं एक इंटरैक्टिव सत्र कैसे प्राप्त कर सकता हूं, और फिर भी एक कमांड चला सकता हूं जिसे मैंने अपने स्थानीय मशीन से निर्दिष्ट किया है। उदाहरण के लिए, मैं स्क्रीन खोलना और एक विशिष्ट स्क्रीन सत्र को फिर से शुरू करना चाहूंगा:
ssh me@example.com 'screen -r 12345'
लेकिन यह अनुमति नहीं है, त्रुटि को वापस करना "एक टर्मिनल से जुड़ा होना चाहिए।" जो मुझे लगता है कि अनिवार्य रूप से "एक इंटरैक्टिव शेल से इस कमांड को कॉल करना चाहिए" का मतलब है।
एक अन्य उदाहरण के रूप में, मैं एक टन मशीनों का उपयोग करता हूं, जिनके लिए मुझे कुछ चीजों को करने के अधिकारों के लिए साझा खाते का उपयोग करने की आवश्यकता होती है (हाँ, मुझे पता है: बुरा विचार लेकिन मुझे दोष न दें, मैंने चीजों को सेट नहीं किया है रास्ता), और वे आमतौर पर डिफ़ॉल्ट शेल के रूप में ksh होते हैं। मैं लॉग इन करना चाहता हूँ, bash (या zsh) पर स्विच करता हूँ, और अपने स्वयं के खाते को .bash_profile (या .zshrc) स्रोत करता हूँ। यह आसान होगा यदि मैं एक इंटरैक्टिव ssh सत्र स्थापित कर सकता हूं और लॉगिन पर चलाने के लिए रिमोट मशीन को कमांड दे सकता हूं ।
मेरे मन में एक बहुत ही क्लीवेज (और अनकहा) समाधान है जिसे मैं पोस्ट करूंगा, लेकिन मैं उम्मीद कर रहा हूं कि कोई बेहतर तरीका जानता है।
अद्यतन: जिन लोगों को यह महसूस नहीं हुआ, मैं हाथ से यह सब करने की योजना नहीं बना रहा हूं, इसलिए मुझे एक इंटरैक्टिव सत्र खोलने के लिए कह रहा हूं और फिर इसे हाथ से करने से वास्तव में कुछ भी हल नहीं होता है।
2 अद्यतन: स्पष्ट करने के लिए एक बार फिर प्रयास करने के लिए: मैं सर्वर पर (मनमाने ढंग से) कमांड चलाने की कोशिश कर रहा हूं (क्लाइंट पर निर्दिष्ट) लेकिन फिर एक इंटरैक्टिव सत्र खुला है जो उन प्रोग्राम कमांड द्वारा किए गए किसी भी चीज से प्रभावित होता है।
echo "command" | ssh user@remote_host