सवाल मैं अपने डेस्कटॉप से ​​दूरस्थ सर्वर पर ssh पर कमांड के साथ एक स्क्रीन सत्र कैसे लॉन्च कर सकता हूं?


मैं अपने डेस्कटॉप पर एक एसएसएच कमांड से रिमोट सर्वर पर स्क्रीन सत्र लॉन्च करने में सक्षम होना चाहता हूं। हालांकि, स्क्रीन को टर्मिनल की आवश्यकता होती है, जो एसएसएच के माध्यम से कमांड चलाते समय उपलब्ध नहीं है।

तो स्पष्ट है

ssh root@my.machine screen "tail -f /var/log/messages"

(एक उदाहरण के रूप में) काम नहीं करता है, और देता है

Must be connected to a terminal.

मैं एसएसएच को स्क्रीन के नीचे कमांड लॉन्च करना चाहता हूं, इसलिए मैं बाद में लॉग इन कर सकता हूं और एक स्क्रीन सत्र के रूप में संलग्न कर सकता हूं जिसे मैं मैन्युअल रूप से लॉन्च करता।


55
2018-06-08 10:57


मूल


एक तरफ के रूप में, आप इस त्रुटि को स्क्रीन के खराब उपयोग के माध्यम से नहीं मार सकते हैं। मेरे पास एक खोल फ़ंक्शन था जो फ़ाइल से पढ़ने के लिए exec <foo कर रहा था। बाद में एक बड़ी लिपि में मैंने स्क्रीन लॉन्च करने की कोशिश की। Obv नीचे सभी विधियों। असफल रहा क्योंकि असली अपराधी निष्पादन था। एक को ध्यान में रखना। जांचें कि आपने अनजाने में अपना खुद का स्टडीन नहीं मारा है। - Neil McGill


जवाब:


Ssh के लिए -t विकल्प का उपयोग करने का प्रयास करें

ssh -t root@my.machine screen "tail -f /var/log/messages"

आदमी एसएसएच से

-टी फोर्स छद्म-टीटी आवंटन। इसका उपयोग arbi- निष्पादित करने के लिए किया जा सकता है
        एक दूरस्थ मशीन पर ट्रायरी स्क्रीन-आधारित प्रोग्राम, जो हो सकता है
        बहुत उपयोगी, उदाहरण के लिए, मेनू सेवाओं को लागू करते समय। एकाधिक
        विकल्प बल टीटी आवंटन, भले ही एसएसएच में कोई स्थानीय टीटीआई न हो।

73
2018-06-08 11:04



मैं tmux के साथ कोशिश कर रहा हूँ ssh -t user@machine tmux attach और मैं एक दूरस्थ tmux सत्र संलग्न कर सकता हूं लेकिन यह चरित्र एन्कोडिंग के साथ गड़बड़ कर देता है। यह केवल ascii वर्ण प्रदर्शित करता है। क्या इसे ठीक करने का कोई तरीका है? - Macario
@Macario आप इसके लिए एक अलग सवाल खोलना चाहेंगे, जबकि यह एसएसटी-टी के साथ चल रहा है, यह संगत रूप से संबंधित है, ऐसा लगता है कि यह एलसी_ * को अलग-अलग चलने के लिए अलग-अलग चलने के लिए अलग-अलग चल रहा है। जब आप निष्पादित करने के लिए ssh को कमांड लाइन पास करते हैं, तो इसे गैर-इंटरैक्टिव वातावरण के साथ निष्पादित किया जाएगा। यह भी संभव है कि गैर-इंटरैक्टिव रूप से निष्पादित करते समय टीईआरएम पर्यावरण चर पारित होने की कमी हो, जिस स्थिति में टीएमयूक्स को यह नहीं पता होगा कि आपके टर्मिनल की वास्तव में क्या क्षमताएं हैं, और कम से कम आम संप्रदाय पर वापस आती हैं। - Kjetil Joergensen
मैं एसएसएच का उपयोग नहीं कर रहा हूं लेकिन एक ही मुद्दे का सामना कर रहा हूं। कृपया मदद कीजिए। serverfault.com/questions/861632/unable-to-run-code-in-screen - zhangjinzhou


आप उपयोग कर सकते हैं:

ssh root@host screen -m -d "tail -f /var/log/messages"

यह एक अलग स्क्रीन को शुरू करने वाले कमांड के साथ शुरू करता है।

   -m   causes screen  to  ignore  the  $STY  environment  variable.  With
        "screen  -m"  creation  of  a  new session is enforced, regardless
        whether screen is called from within  another  screen  session  or
        not.  This  flag has a special meaning in connection with the `-d'
        option:

   -d -m   Start screen in "detached" mode. This creates a new session but
           doesn't  attach  to  it.  This  is  useful  for  system startup
           scripts.

32
2018-06-08 14:08



आपका जवाब उतना ही अच्छा था, मुझे बहुत बुरा लगा। शायद किसी को पहला जवाब संपादित करना चाहिए और अपनी जानकारी जोड़नी चाहिए। - Thomas Vander Stichele


देर से जवाब, लेकिन मैं यही करता हूं, मैं उपनाम करता हूं (चलिए इसे टी कहते हैं) जो यह करता है:

ssh $MYSERVER -a -x -t screen -xRR -A -e^Zz -U -O

इससे पता ssh एजेंट और एक्स 11 अग्रेषण अक्षम करने के लिए, और बताता है screen एक चल रहे सत्र से जुड़ने के लिए, यदि आवश्यक हो तो एक नया शुरू करें, उपयोग करें ^Z ब्रेकआउट कमांड के रूप में, यूटीएफ -8 का उपयोग करें और टर्मिनल के बारे में स्मार्ट बनें।

इसका मतलब है कि मैं टर्मिनल खोल सकता हूं, टाइप करें t और यह $ MYSERVER पर मेरा स्क्रीन सत्र खुल जाएगा। मैं फिर एक और टर्मिनल खोल सकता हूं, वही काम करता हूं और मुझे एक ही सत्र में एक और विंडो मिलती है।

एक ही स्क्रीन सत्र में एकाधिक टर्मिनल विंडो रखना वास्तव में अच्छा है ताकि आप एक ही समय में दो स्क्रीन टैब देख सकें।


8
2017-09-12 20:48



मैंने काफी कुछ पेजों के माध्यम से पढ़ा जो मैं खोज रहा था, काफी जवाब नहीं दे रहा था, लेकिन आपने इसे दबाया। मुझे लगता है कि स्क्रीन या टीएमक्स शायद इन दिनों अधिकांश सर्वरों पर है, और जो मैं कनेक्ट करता हूं वे संभावित रूप से क्षणिक हैं इसलिए मैं बैश्रैक के साथ गड़बड़ नहीं करना चाहता था जैसे अधिकांश उत्तर सुझाव। आप इसे अपने खोल में एक फ़ंक्शन भी बना सकते हैं और $ होस्ट और $ कमांड जैसे तर्क स्वीकार कर सकते हैं (जिसे आप अंत में डाल देंगे)। और अपने उपनाम को हार्डकोड करने के बजाए t जो एक एकल मेजबान है, आप इसे अपने ssh_config में होस्टनाम के साथ जोड़ सकते हैं। - dragon788
@ ड्रैगन788 वास्तव में, मैंने इसे अभी एक फ़ंक्शन बनाया है और "$ @" के साथ $ MYSERVER को बदल दिया है। मैं अभी भी इसका बहुत उपयोग करता हूं। - w00t


मेरे सर्वर पर ~ / .bashrc फ़ाइल में निम्नलिखित डालने से, यह पहली बार सर्वर पर लॉग ऑन करने पर स्क्रीन सत्र शुरू करता है, या यदि कोई पहले से चल रहा है, तो मुझे उस सत्र में दोबारा जोड़ता है।

मुझे यह बहुत आसान लगता है:

if [ -n "$SSH_CONNECTION" ] && [ -z "$SCREEN_EXIST" ]; then
    export SCREEN_EXIST=1
    screen -DRi
fi

4
2018-06-08 14:21



मैंने कोशिश की, लेकिन जब मैं करता हूं screen -ls तो मुझे कोई स्क्रीन सत्र नहीं दिख रहा है - Tarun