SSH सर्वर, निष्पादित कमांड और कनेक्शन बनाए रखें


12

मैं एक स्क्रिप्ट लिखना चाहता हूं जो विभिन्न टैब के साथ एक टर्मिनल खोलता है, sshप्रत्येक टैब में एक सर्वर का उपयोग कर लॉगऑन करता है और प्रत्येक टैब में एक कमांड निष्पादित करता है। उदाहरण के लिए htop:।

नीचे दी गई स्क्रिप्ट सर्वर पर लॉग इन सभी 4 टैब के साथ एक टर्मिनल खोलता है। लेकिन अगर मैं लाइन htopमें कमांड जोड़ने की कोशिश करता हूं तो cmd=यह काम नहीं करता है ...

#bin/bash

tab="--tab"
cmd="bash -c 'ssh user@host';bash"
foo=""

for i in 1 2 3 4; do
      foo+=($tab -e "$cmd")         
done

gnome-terminal "${foo[@]}"

exit 0

मैंने यह कोशिश की है ...

cmd="bash -c 'ssh user@host htop';bash"

... क्योंकि ssh --helpकहते हैं कि वाक्य रचना के लिए sshहै:

उपयोग: ssh [उपयोगकर्ता @] होस्टनाम [कमांड]

जवाबों:


14

अपने सरलतम रूप में:

ssh -t user@host "command; bash"

-tयहाँ महत्वपूर्ण हिस्सा है। यह मेजबान को प्रक्रिया के लिए एक आभासी टर्मिनल आवंटित करने के लिए मजबूर करता है, जो इसे खुले रहने की अनुमति देता है।

यदि आप सर्वर के भार पर केवल htop चलाना चाहते हैं, तो आप bashअंत में छोड़ सकते हैं लेकिन इसका मतलब है कि यदि आपने htop छोड़ दिया है, तो आप एक स्थानीय टर्मिनल पर वापस आ जाएंगे।


मैंने cmd = "bash -c 'ssh -t user @ host htop'; bash" आज़माया। यह काम करता है लेकिन अगर मैं htop छोड़ देता हूं तो मैं स्थानीय टर्मिनल पर वापस आ जाता हूं और मैं नहीं चाहता कि यह हो
Red

1
@Red अपने कोट्स की जाँच करें - वे सभी जगह पर हैं - आपको htop और bash को एक साथ ग्रुप करने की आवश्यकता है ताकि वे दोनों रिमोट सर्वर पर चलें। bash -c 'ssh -t user@host "htop;bash"'बेहतर होगा, लेकिन मैं यह नहीं देखता कि आप पहली बार में इस चीज़ को एक रैश रैपर में तलने की कोशिश क्यों कर रहे हैं। यह आवश्यक नहीं है - आप केवल स्थानीय रूप से एक कमांड चला रहे हैं।
ओली

धन्यवाद, अब यह cmd के साथ काम करता है = "ssh -t user @ host htop; bash"
Red

एक अच्छा जवाब, लेकिन बैश से उपयोग करने के लिए कुछ बेहतर होना चाहिए ताकि समाप्त न हो।
mc0e

@ mc0e निर्भर करता है कि आप क्या करना चाहते हैं। यह प्रश्न आपकी कमांड चलाने के बाद एक उपयोगी शेल प्राप्त करने के बारे में अधिक है। तुम सिर्फ रोकना चाहते हैं, तो आप स्थानापन्न कर सकता है bashके लिए read
ओली
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.