स्वचालित रूप से ssh लॉगिन पर स्क्रीन शुरू करें


19

मैं sshएक दूरस्थ सर्वर के लिए स्क्रीन को स्वचालित रूप से शुरू करने के तरीके के बारे में पढ़ रहा हूं । मैं एक सरल एक लाइनर मेरे में जोड़ने के लिए चाहते हैं .bash_profileशुरू करने के लिए screenजब मैं sshमें, और मेरे दूरस्थ कनेक्शन से बाहर निकलने नहीं जब मैं स्क्रीन को अलग।

मैं में देख किया गया है exec screenऔर काफी के प्रत्येक संयोजन -d, -r, -Dऔर -Rऔर को समझ नहीं सकता कि मैं क्या झंडे की जरूरत है।

आदर्श रूप से मैं टाइप करूंगा ssh whateverऔर सर्वर में एक नए में लॉग इन किया screenजाऊंगा या यह एक पुरानी स्क्रीन को रीएटचैट कर सकता है, मैं यह जानना चाहूंगा कि दोनों को कैसे देखना है जो मुझे बेहतर लगता है। फिर मैं या तो टाइप कर सकता हूं Ctrl adया Ctrl dउसने मुझे sshउस सर्वर के लिए सामान्य लॉगिन पर वापस ला दिया है (जहां आप motd देखेंगे)। वहां से मैं screen -rजो भी स्क्रीन पर वापस आ सकता हूं, या Ctrl dलॉग आउट करने के लिए फिर से हिट कर सकता हूं ।

जवाबों:


19

एक साधारण screen -Rको चाल चलनी चाहिए।

इसे सत्यापित करने के लिए, मैंने screen -Rएक रिमोट सर्वर पर अपने .bash_profile को जोड़ा , लॉग इन किया, स्क्रीन से अलग किया, और रिमोट सर्वर पर एक सामान्य शेल प्रॉम्प्ट पर वापस गिरा दिया गया। के साथ सत्यापित। बाद के लॉगिन ने अपेक्षित परिणाम (स्क्रीन सत्र के लिए फिर से संलग्न) प्राप्त किया।


धन्यवाद! मैं चारों ओर पढ़ रहा था और मैं इस धारणा के तहत था कि मुझे स्क्रीन-आर निष्पादित करने की आवश्यकता होगी। खुशी है कि यह काम किया
रोनाल्ड ड्रेगन

स्क्रीन को ctrl + D द्वारा बंद करने के बाद उस लाइन को ssh सेशन के तुरंत बाद लगाना logoutया exitसही करना एक बुरा विचार है ?
गिद्धो

इसने मेरे लिए काम नहीं किया। जब से सत्र शुरू होता है, हर बार लाइन निष्पादित होने के बाद मैंने कुछ दर्जन स्क्रीन शुरू की हैं। आपने यह कैसे किया ताकि ऐसा न हो?
थॉमस

11

मेरे पास ४० कैस्केडिंग स्क्रीन सत्रों के साथ कुछ समाधान के साथ समस्याएँ पैदा हो रही थीं जब एक नई विंडो या स्क्रीन सत्र शुरू कर रहे थे। मैं कैस्केडिंग स्क्रीन को खत्म करने और एक नया सत्र बनाने में सक्षम था यदि कोई इसके साथ मौजूद नहीं था:

if [ -z "$STY" ]; then screen -R; fi

यह परीक्षण करता है कि क्या आप स्क्रीन सत्र में हैं और screen -Rयदि आप नहीं हैं तो चलता है । परीक्षण के बिना आपको "स्क्रीन के अंदर से कोचिंग?" हर बार स्क्रीन से चेतावनी देने पर आप एक नई स्क्रीन विंडो बनाते हैं।


+1 - यह उस screen -lsपरीक्षण से बेहतर है जिसका टोनी ने उल्लेख किया है
cwd

10

screen -RR पहले उपलब्ध सत्र के लिए रीटेट करें या यदि आवश्यक हो तो एक बनाएं।


स्क्रीन -R का उपयोग करना वास्तव में उपयोगी था क्योंकि मुझे कई सत्रों से परेशानी हो रही थी।
डेविड वी।

यह बहुत बढ़िया है, धन्यवाद! यह पहले "डिटैच किए गए" सत्र को जोड़ता है (यदि कोई हो), और संलग्न सत्र को अनदेखा करता है। तो यह आपको लॉगिन करने और कई खिड़कियां खोलने की अनुमति देता है, लेकिन फिर भी यह सुनिश्चित करें कि प्रत्येक सत्र में एक स्क्रीन में चलने की सुरक्षा है। हमारे ओपीएस लोग आपका धन्यवाद करते हैं!
इयान मैकगोवन

8

अगर मुझे आपकी ज़रूरत समझ में आती है, तो आपको कोशिश करनी चाहिए:

if $(screen -ls | grep -q pts); then screen -x; else screen -R; fi

यह केवल एक स्क्रीन सत्र बनाएगा, अन्यथा यह मल्टी-विंडोज फैशन में मौजूदा एक को फिर से कनेक्ट करेगा (भले ही आपके पास कई ssh सत्र हो, आप एक ही स्क्रीन सत्र तक समाप्त हो जाएंगे)


मुझे इसकी मान्यता के लिए यह विचार पसंद है कि हमारे पास मल्टी-विंडो एसएसएच क्लाइंट हैं (या कभी-कभी मशीन पर सीधे जाकर लॉग इन करते हैं)। यह काफी लचीला है यदि आप बिटविस जैसी किसी चीज का उपयोग करते हैं और कई टर्मिनल विंडो खुली हैं - आप अलग-अलग भौतिक खिड़कियों में अलग-अलग स्क्रीन विंडो को चालू कर सकते हैं।
पीकू

1
यह सब के साथ प्रतिस्थापित किया जा सकता है screen -xR, जिसे "अटैचमेंट के रूप में देखा जाता है यदि इसमें संलग्न करने के लिए कुछ है, तो नई स्क्रीन बनाएं"।
पिस्कोवर ने

0

यहाँ थोड़ा विस्तार,

अगर एक से अधिक अलग स्क्रीन सेशन हो तो bashrc चेक की स्क्रिप्ट। यदि अधिक है, तो आपको सत्र मैनुअल का चयन करना होगा। जब कोई अलग सत्र होता है, तो आप इस सत्र में वापस आते हैं। यदि आप सत्र से बाहर निकलते हैं तो ssh सत्र भी बंद हो जाएगा।

 #Start Screen
 if [ -z "$STY" ]; then

 value=$( screen -ls |grep '\<pts.*Detached\>' |wc -l )

 if [ $value -gt 1 ]; then

  screen -ls

 else

  screen -R

  echo 5 Sek. bis die SSH Session beendet wird.

  echo Strg + C - um ohne screen weiter zu arbeiten.

  sleep 6

  exit

 fi

fi

0

यदि आप SSH के माध्यम से कनेक्ट होने पर स्क्रीन सत्र से स्वचालित रूप से कनेक्ट करना चाहते हैं , तो अपने रिमोट मशीन पर अपने .bash_profileया अपने नीचे दिए गए कोड को जोड़ें .bashrc:

  • SSH के माध्यम से कनेक्ट होने पर हर बार एक नया स्क्रीन सत्र प्रारंभ करें।
  • पुनः प्रयोग करें पहले से ही विद्यमान अलग स्क्रीन सत्र, हमेशा नवीनतम एक के साथ शुरू। यदि कोई अलग सत्र उपलब्ध नहीं है तो यह एक नई शुरुआत करता है।
  • जब आप अपनी मशीन में कई SSH कनेक्शन खोलते हैं तो आपको एक अलग स्क्रीन सेशन मिलेगा क्योंकि हम केवल अलग किए गए री-यूज कर रहे हैं।
  • यदि आप स्क्रिप्ट को अपने साथ जोड़ रहे हैं तो लूप से बचें .bashrc

यहाँ स्क्रिप्ट है:

#!/bin/bash
#
#  Attaches to the first Detached Screen. Otherwise starts a new Screen.

# Only run if we are not already inside a running screen and only if in an SSH session.
if [[ -z "${STY}" && ! -z "${SSH_CLIENT}" ]]; then
  detached_screens=($(screen -ls | grep pts | grep -v Attached))

  for screen in "${detached_screens[@]}"; do
    if [[ "${screen}" == *".pts"* ]]; then
      IFS='.pts' read -ra split <<< "${screen}"
      for id in "${split[@]}"; do
        first_id="${id}"
        break
      done 
      break
    fi
  done

  screen -R $first_id
fi

पुनश्च: यदि आप इसे स्थानीय टर्मिनल के लिए सक्षम करना चाहते हैं, && ! -z "${SSH_CLIENT}तो पहली पंक्ति पर निकालें ।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.