प्रभावी ढंग से स्क्रीन और एसएसएच का उपयोग कैसे करें?


12

मैं SSH और स्क्रीन को कॉन्फ़िगर करना चाहता हूं, ताकि एक लॉगिन हमेशा एक स्क्रीन सत्र के लिए रीटेट करेगा। आदर्श रूप से, जब मैं Cd दबाता हूं तो वह सत्र नहीं छोड़ेगा लेकिन अलग नहीं होगा। यह कैसे हासिल किया जा सकता है? और मेरे SSH- जीवन को आसान बनाने के लिए और कौन सी उपयोगी सेटिंग्स हैं?

जवाबों:


9

मैंने अपने सभी सर्वरों के लिए बस इतना ही किया है कि जब मैं SSH के माध्यम से जुड़ता हूं तो मुझे स्वचालित रूप से एक स्क्रीन सत्र में डाल दिया जाता है।

अपने उपयोगकर्ता खातों के लिए ~ / .bashrc पर निम्नलिखित जोड़ें:

# Auto-screen invocation. see: http://taint.org/wk/RemoteLoginAutoScreen
# if we're coming from a remote SSH connection, in an interactive session
# then automatically put us into a screen(1) session.   Only try once
# -- if $STARTED_SCREEN is set, don't try it again, to avoid looping
# if screen fails for some reason.
if [ "$PS1" != "" -a "${STARTED_SCREEN:-x}" = x -a "${SSH_TTY:-x}" != x ] 
then
  STARTED_SCREEN=1 ; export STARTED_SCREEN
  screen -RR -S main || echo "Screen failed! continuing with normal bash startup"
fi
# [end of auto-screen snippet]

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


मैं बस यह जोड़ना चाहता था कि CTRL-d कुंजी संयोजन स्क्रीन में मानक चल रहे स्क्रीन सत्र से अलग करने के लिए है।
कैओस

8

मेरे पास मेरे .bash_profile में मेरे दूरस्थ सर्वर पर निम्नलिखित हैं:

if [ -z "${STY}" -a -t 0 -a X${USER} = Xarcege ]; then
    reattach() {
        if [ -n "${SSH_AUTH_SOCK}" ]; then
            ln -snf "${SSH_AUTH_SOCK}" "${HOME}/.ssh/agent-script"
            SSH_AUTH_SOCK="${HOME}/.ssh/agent-script" export SSH_AUTH_SOCK
        fi
        exec screen -A -D -RR ${1:+"$@"}
    }
    screen -wipe
    echo 'starting screen... (type Ctrl-C to abort)'
    sleep 5 && reattach
fi

यह दो काम करता है: पहला, शेल को बदलने के लिए शेल फ़ंक्शन सेट करता है और ssh- एजेंट कनेक्शन को आगे बढ़ाता है, दूसरा यह कुछ सेकंड के लिए रुकने के बाद फ़ंक्शन को कॉल करता है (यदि आप स्क्रीन को शुरू नहीं करना चाहते हैं)।

पहला ifखंड सही होगा यदि पहले से चल रही स्क्रीन ( -z "${STY}") टर्मिनल से जुड़ी हुई नहीं है ( -t 0) और मैं sudo नहीं चला रहा हूं (जो कभी-कभी आपको बदलता है $USER)।

reattachसमारोह पहले की जाँच करेगा अगर ssh एक ssh-एजेंट सक्रिय बंदरगाह (के साथ बुलाया गया था -n "${SSH_AUTH_SOCK}")। फिर यह ~/.ssh/agent-scriptवर्तमान में सक्रिय सॉकेट फ़ाइल के साथ जो कुछ भी है उसे बदल देगा और $SSH_AUTH_SOCKनए मान के साथ पर्यावरण चर ( ) को बदल देगा । तब स्क्रिप्ट वर्तमान शेल को एक screenसत्र के साथ बदल देगी (यह सुनिश्चित करना कि केवल एक ही मौजूद होना चाहिए)। reattachफ़ंक्शन के किसी भी तर्क को कमांड ( ${1:+"$@"}) में पास किया जाता है।

अंतिम भाग पहले किसी भी मृत सत्र ( screen -wipe) को हटा देता है, जिससे उपयोगकर्ता (मुझे) पता चल जाता है कि स्क्रीन शीघ्र ही शुरू हो जाएगी और इसके बजाय खोलकर वापस आ सकती है Ctrl- C। फिर यह 5 सेकंड तक इंतजार करता है और reattachफ़ंक्शन को कॉल करता है।


4

सबसे पहले, यदि आप बायोबू का उपयोग करते हैं तो आप नए शेल सत्र को हमेशा स्वचालित रूप से बायोबू शुरू करने के लिए कॉन्फ़िगर कर सकते हैं (जो अनिवार्य रूप से एक अच्छा स्क्रीन कॉन्फ़िगरेशन है, हालांकि नए संस्करण बैकएंड के रूप में tmux का उपयोग कर सकते हैं)। क्या तुम सच में नहीं Byobu स्क्रीन तो आप शायद सेट कर सकते हैं अपने संपादन करके मैन्युअल रूप से कनेक्ट करने के लिए चाहते हैं .profileके लिए या अन्य खोल config स्क्रिप्ट exec screenयदि TERM != "screen"

यदि आपको वह पसंद नहीं है, तो आप authorized_keysएक विशिष्ट कुंजी के साथ कनेक्शन के लिए एक विशिष्ट कमांड चलाने के लिए फ़ाइल का उपयोग कर सकते हैं (और आपके पास जितनी चाहें उतनी कुंजी हो सकती हैं)। man sshdविवरण के लिए देखें। मेरा सुझाव है कि आप कमांड को एक स्क्रिप्ट चलाएं जो यह जांचती है कि स्क्रीन चल रही है और कनेक्ट हो रही है, या फिर एक नया सत्र शुरू होता है।

Ctrl-D पर डिस्कनेक्ट करने के लिए, स्क्रीन आपको अपने में मुख्य मैपिंग सेट करने की अनुमति देती है .screenrcman screenविवरण के लिए देखें। आप "बिंदकी" की तलाश में हैं।


2

शायद आपके सवाल से पूरी तरह अप्रासंगिक, लेकिन क्या आपने कभी इसके बजाय TMUX का उपयोग करने पर विचार किया है। यह बहुत सारी कार्यक्षमता करता है जिसे आप बॉक्स से बाहर देख रहे हैं।

उदाहरण के लिए। यदि आप एक SSH सत्र से डिस्कनेक्ट करते हैं, जब आप TMUX के अधीन होते हैं, तो आपको बस इतना करना है कि आप अपने सत्र को संलग्न करने के लिए "tmux a" चलाएं। जब से मैंने TMUX का उपयोग करना शुरू किया, मैं भूल गया कि क्या nohup / disown कमांड हैं ... अगर आपको कुछ चलाने और लॉगआउट करने की आवश्यकता है - इसे tmux और detach के अंदर चलाएं। कमांड आउटपुट बफ़र किया जाएगा, इसलिए आप बाद में इसकी समीक्षा कर सकते हैं।

स्वचालित रूप से संलग्न करने के लिए आप नीचे .bashrc की तरह कुछ जोड़ सकते हैं:

[ -z $TMUX ] && tmux list-sessions 2>/dev/null && tmux a

या इससे भी आसान

tmux a 2>/dev/null

यह कम स्मृति फुटप्रिंट और समग्र IMHO विकल्प का उपयोग करने के लिए बेहतर / आसान है।

मेटा-डी शॉर्टकट TMUX में अलग करने के लिए डिफ़ॉल्ट मैपिंग है।


0

screen -dAr default || screen -AS defaultमेरे लिये कार्य करता है। मैं उसे अपने ~ / .bashrc में जोड़ता हूं ।

संक्षेप में स्विच की व्याख्या:

  • d - यदि यह अभी भी दूसरे सत्र से जुड़ा हुआ है, तो स्क्रीन को अलग करें।
  • A - स्क्रीन को नए टर्मिनल साइज में विंडो एडॉप्ट करें।
  • r default - डिफ़ॉल्ट नामक स्क्रीन पर अटैच करें।

यदि पहला स्क्रीन कमांड (पहले वाला ||) सफल नहीं होता है, तो दूसरा चलाया जाता है:

  • A - जैसा कि ऊपर ...
  • S default- नाम डिफ़ॉल्ट के साथ नया स्क्रीन सत्र बनाएं ।

0

मेरा सुझाव है कि बायोबू का उपयोग करें । यह उपकरण tmux का उपयोग करता है और एक अच्छा टूलबार और अन्य सुविधाजनक विंडो स्विचिंग सुविधाएं, हॉटकी आदि प्रदान करता है।

echo "new-session" >> ~/.byobu/.tmux.conf
echo "if [ -n '\$TMUX' ]; then :; else byobu attach; fi" >> ~/.bashrc

एक सफल SSH कोशिश के साथ सिस्टम को लॉगिन करने के बाद इन उपरोक्त आदेशों के साथ और मौजूदा byobu-tmux सत्र में संलग्न करें, यदि यह नया सत्र नहीं बनाएगा।

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