डिस्कनेक्ट किए गए सत्र को फिर से कैसे कनेक्ट करें


156

वहाँ एक सत्र सत्र से कनेक्ट करने का एक तरीका है जिसे डिस्कनेक्ट किया गया था? हम अपने नेटवर्क कनेक्शन के साथ किसी दूरस्थ साइट पर समस्या कर रहे हैं जिसे हम अलग से काम कर रहे हैं; हालाँकि, इस बीच हम दूरस्थ स्थान पर सर्वर से कनेक्ट होने के दौरान खोए हुए पैकेट के कारण बड़ी संख्या में डिस्कनेक्ट का अनुभव करते हैं। कई बार सत्र थोड़ी देर के लिए सक्रिय रहता है, और कभी-कभी ऐसा होता है कि कुछ कार्रवाई के बीच में होता है (फ़ाइल संपादन, कुछ प्रक्रिया चल रही है, आदि ...) जो मुझे संभव होने के बजाय फिर से शुरू करने की आवश्यकता है।


10
मुझे विश्वास नहीं होता कि किसी ने भी mosh.mit.edu
jwbensley

@ जावानो: मैंने इसके बारे में कभी नहीं सुना। उत्तर के रूप में जोड़ें!
kbyrd

@kbyrd ने किया है;)
jwbensley

इसी तरह का सवाल unix.stackexchange.com/questions/105001/… में कुछ संकेत के साथ पूछा गया था कि पहली जगह में डिस्कनेक्ट के आसपास कैसे काम किया जाए ...
aarcat

जवाबों:


135

अद्यतन: वास्तविक उत्तर के लिए नीचे शून्य_ का उत्तर देखें

यह एक उत्तर नहीं है, लेकिन एक समाधान है। स्क्रीन का उपयोग करें ।

जब आप पहली बार लॉग इन करते हैं, तो स्क्रीन चलाएं। आप एक और शेल प्राप्त करते हैं, उस में कमांड चलाते हैं। यदि आप डिस्कनेक्ट हो गए हैं, तो स्क्रीन प्रक्रिया टर्मिनल को जीवित रखती है ताकि आपका शेल और जो प्रक्रियाएं चल रही हैं वे खत्म न हों। जब आप पुन: कनेक्ट करते हैं, तो फिर से शुरू करने के लिए 'स्क्रीन -r' चलाएं।

स्क्रीन को कॉन्फ़िगर करने और उपयोग करने के लिए एक गुच्छा अधिक है, लेकिन उपरोक्त को आपकी समस्या को हल करना चाहिए।


18
या tmux का उपयोग करें - एक 'कूलर' स्क्रीन, मैंने दोनों का उपयोग किया है और बहुत पसंद tmux है क्योंकि आप इस शब्द को अच्छी तरह से विभाजित कर सकते हैं।
जॉन हंट

3
मुझे यह जानकर खुशी हुई कि screenमेरे उबंटू 12.x पर पहले से ही इन्स्टॉल था, इसलिए अगर आपको यकीन नहीं है तो बस इस कमांड को आज़माएँ, इसने पुनः - कनेक्ट -अपग्रेड प्रक्रिया को फिर से कनेक्ट और फिर से शुरू किया : sudo screen -D -r
bjm88

1
@ bjm88, sudoका उपयोग केवल तभी किया जाना चाहिए जब मूल स्क्रीन सत्र को सूडो के साथ शुरू किया गया था। अन्यथा यह वापस आ जाएगा जैसे कि कोई स्क्रीन सत्र मौजूद नहीं है:There is no screen to be detached
नोम मानोस

मुझे पता है कि यह वास्तविक जवाब नहीं है; तथापि, screen -rथा वास्तव में मैं क्या देख रहा था।
एरिक नेल्सन

129

ClientAliveInterval (जैसे 60) और TCPKeepAlive (हाँ या नहीं) को सर्वराइड sshd.conf पर उचित मान पर सेट करने का प्रयास करें।

यह आपके सत्र को जीवित रखना चाहिए भले ही कनेक्शन मिनटों के लिए खो जाए।


24
अब तक, आप केवल स्क्रीन को वर्कअराउंड के रूप में सुझाव देने के बजाय प्रश्न का उत्तर दे रहे हैं।
kbyrd

2
अच्छा निर्णय। सिस्को एएसए / पीआईएक्स फायरवॉल को ट्रेस करते समय हमने इस विधि को उपयोगी रूप से उपयोगी पाया है, जो डिफ़ॉल्ट रूप से टीसीपी कनेक्शन के लिए समय-समय पर प्यार करता है।
माइक पाउंटनी

5
शायद यह पूछने के लिए सही जगह नहीं है, लेकिन क्या पोस्टर के लिए जवाब बदलना संभव है? हमें इस जानकारी के साथ 'स्क्रीन' का जवाब देना चाहिए (मेरा सबसे अच्छा नहीं है, मुझे माइक पाउंटनी पसंद है, लेकिन मुझे इसका रिप्लाई मिला)।
kbyrd

1
सिस्को वीपीएन कनेक्शन पर कनेक्ट होने पर क्या यह काम करेगा, और वीपीएन कनेक्शन खो गया है और फिर से स्थापित हो गया है?
ब्रेंट

मेरे लिए स्क्रीन सही काम करती है, मैं स्क्रीन किए गए कार्य और काम को फिर से जोड़ सकता हूं
इंटीग्रेटर

64

जैसा कि ऊपर कहा गया है, जीएनयू स्क्रीन जाने का रास्ता है। यह आपको दूरस्थ बॉक्स पर एक 'स्क्रीन सत्र' की अनुमति देगा, जिसमें आप कई 'स्क्रीन विंडो' के माध्यम से कई कमांड चला सकते हैं। यह बस अलग हो जाएगा अगर आपके माता-पिता SSH कनेक्शन मर जाते हैं, सभी उपप्रकारों को जीवित और अच्छी तरह से चला रहे हैं।

' man screen' हमेशा की तरह आपका दोस्त है, और screenअगर यह डिफ़ॉल्ट रूप से स्थापित नहीं है , तो ओएस पैकेज को ' ' कहा जाना चाहिए ।

मूल बातें हैं:

  • एक स्क्रीन सत्र शुरू करें (अपने दूरस्थ होस्ट पर):

    $ screen
    
  • अपनी स्क्रीन सत्र से डिस्कनेक्ट: CTRL-A,d

  • दोबारा लॉग इन करने के बाद अपने स्क्रीन सेशन को फिर से कनेक्ट करें:

    $ screen -d -r
    
  • एक और स्क्रीन 'विंडो' खोलें: CTRL-A,c

  • आप खुले स्क्रीन खिड़कियों के माध्यम से साइकिल: CTRL-A,space

स्क्रीन के साथ आप बहुत कुछ कर सकते हैं। मैं 10 वर्षों से इसका उपयोग कर रहा हूं, और अभी भी नई सुविधाओं का पता लगा रहा हूं। यह मेरी पसंदीदा यूनिक्स उपयोगिता है।


1
हाँ, यह मेरा एक बेहतर जवाब है।
kbyrd

क्या मैं अभी भी डिस्कनेक्ट किए गए सत्र से कनेक्ट कर सकता हूं, अगर मैं अपने पीसी को रिबूट करता हूं जहां स्क्रीन चल रही है?
बैराठुतुकुरी

tmux अधिक शक्तिशाली है
पेगासस

46

मैं विश्वास नहीं कर सकता कि किसी ने MOSH का उल्लेख नहीं किया है ;

Mosh एक अलग प्रोटोकॉल है जो SSH लॉगिन प्रक्रिया में हुक कर सकता है, यह आपके सत्र को वियोग के दिनों के बाद, आईपी को बदलने, उच्च विलंबता और इतने पर जीवित रखता है। इसे होम पेज पर बेहतर तरीके से समझाया गया है, मैं इसे समझा सकता हूं इसलिए मैंने नीचे दिए गए विवरण की नकल की है। मेरे अनुभव और सलाह है कि मैं इसे अपने एंड्रॉइड मोबाइल पर उपयोग करता हूं, यह यात्रा और SSH'ing के दौरान एक जीवन रक्षक है। उदाहरण के लिए ट्रेन में मोबाइल से छेड़छाड़ करने पर मेरे लैपटॉप पर भी यही बात लागू होती है। मैं नवीनतम संस्करण प्राप्त करने के लिए स्रोत से संकलन करने की सलाह देता हूं, उबंटू के अंदर मेरे लिए रेपो संस्करण में कुछ झुंझलाहट हैं जो नवीनतम संस्करण (लेखन के समय) में तय की गई हैं।

मोश (मोबाइल शेल)

रिमोट टर्मिनल एप्लिकेशन जो रोमिंग की अनुमति देता है, आंतरायिक संपर्क का समर्थन करता है, और उपयोगकर्ता कीस्ट्रोक्स के बुद्धिमान स्थानीय गूंज और लाइन संपादन प्रदान करता है।

Mosh SSH के लिए एक प्रतिस्थापन है। यह अधिक मजबूत और उत्तरदायी है, विशेष रूप से वाई-फाई, सेलुलर और लंबी दूरी की लिंक पर।

Mosh मुफ्त सॉफ्टवेयर है, जो GNU / Linux, FreeBSD, Solaris, Mac OS X और Android के लिए उपलब्ध है।

वेबसाइट से सुविधाएँ:

  • आईपी ​​बदलें। जुड़े रहें : जैसे ही आप इंटरनेट कनेक्शन के बीच जाते हैं, Mosh अपने आप घूमने लगता है। ट्रेन में वाई-फाई, एक होटल में ईथरनेट और एक समुद्र तट पर एलटीई का उपयोग करें: आप लॉग इन रहेंगे। अधिकांश नेटवर्क प्रोग्राम रोमिंग के बाद अपने कनेक्शन खो देते हैं, जिसमें एसएसएच और जीमेल जैसे वेब ऐप शामिल हैं। मोश अलग है।

  • मीठे सपनों के लिए बनाती है : मॉश के साथ, आप अपने कनेक्शन को बरकरार रखते हुए अपने लैपटॉप को सोने और जागने के लिए रख सकते हैं। यदि आपका इंटरनेट कनेक्शन गिरता है, तो Mosh आपको चेतावनी देगा - लेकिन नेटवर्क सेवा वापस आने पर कनेक्शन फिर से शुरू हो जाता है।

  • नेटवर्क लैग से छुटकारा पाएं : SSH आपको अपनी टाइपिंग दिखाने से पहले सर्वर के जवाब का इंतजार करता है। यह एक घटिया उपयोगकर्ता इंटरफ़ेस के लिए बना सकता है। मोश अलग है: यह टाइपिंग, डिलीट और लाइन एडिटिंग के लिए तुरंत प्रतिक्रिया देता है। यह यह अनुकूल रूप से करता है और ईएमएसी और विम जैसे पूर्ण-स्क्रीन कार्यक्रमों में भी काम करता है। एक खराब कनेक्शन पर, बकाया भविष्यवाणियों को रेखांकित किया जाता है ताकि आप गुमराह न हों।

  • कोई विशेषाधिकार प्राप्त कोड नहीं। कोई डेमॉन नहीं : आपको मॉश को स्थापित करने या चलाने के लिए सुपरयुसर होने की आवश्यकता नहीं है। क्लाइंट और सर्वर एक सामान्य उपयोगकर्ता द्वारा चलाए जाने वाले निष्पादनयोग्य हैं और केवल कनेक्शन के जीवन के लिए हैं।

  • समान लॉगिन विधि : Mosh नेटवर्क पोर्ट्स पर नहीं सुनता है या उपयोगकर्ताओं को प्रमाणित नहीं करता है। Mosh क्लाइंट SSH के माध्यम से सर्वर में प्रवेश करता है, और उपयोगकर्ता पहले की तरह ही क्रेडेंशियल (जैसे, पासवर्ड, सार्वजनिक कुंजी) प्रस्तुत करते हैं। तब Mosh-mosh-server को दूरस्थ रूप से चलाता है और इसे UDP से जोड़ता है।

  • आपके टर्मिनल के अंदर चलता है , लेकिन बेहतर है : Mosh एक कमांड लाइन प्रोग्राम है, जैसे ssh। आप इसे xterm, gnome-terminal, urxvt, Terminal.app, iTerm, emacs, screen, या tmux के अंदर उपयोग कर सकते हैं। लेकिन मोश खरोंच से डिजाइन किया गया था और बस एक वर्ण सेट का समर्थन करता है: UTF-8। यह अन्य टर्मिनलों में और SSH में यूनिकोड बग को ठीक करता है।

  • नियंत्रण-सी महान काम करता है : एसएसएच के विपरीत, मॉश का यूडीपी-आधारित प्रोटोकॉल पैकेट लॉस को इनायत से संभालता है, और नेटवर्क स्थितियों के आधार पर फ्रेम दर निर्धारित करता है। Mosh नेटवर्क बफ़र्स को नहीं भरता है, इसलिए Control-C
    हमेशा एक भगोड़ा प्रक्रिया को रोकने का काम करता है।


8
मोश एक ssh आवरण नहीं है - यह एक अलग प्रोटोकॉल है, लगभग पूरी तरह से ssh के लिए असंबंधित है (यह केवल लॉगिन के लिए ssh का उपयोग करता है)।
3

+1 बहुत सही, मेरी गलती।
jwbensley

2
सुरक्षा के बारे में क्या, बीच में आदमी? एन्क्रिप्शन? प्रमुख विनिमय?
नासिर इकबाल

Mosh भयानक लग रहा है, हालांकि दुख की बात है पोर्ट अग्रेषण अभी तक समर्थन नहीं करता है
Boann

20

autossh आपका कनेक्शन देखता है और यदि यह नीचे जाता है, तो यह फिर से जुड़ जाता है। यह रखवाले की तुलना में अधिक विश्वसनीय है। यदि आप एक स्क्रीन सत्र से कनेक्ट करते हैं, तो आप वहीं से जारी रखेंगे, जहाँ से आपने डिस्कनेक्ट किया है (देखें rscreenकि ऑटोस के साथ आता है)


1
एक विन्यास योग्य जीवित के बाहर, यह स्वाभाविक रूप से आपको एक सत्र (जिसे ओपी की तलाश थी) को फिर से जोड़ने की अनुमति नहीं देता है। लेकिन आटोश उन ऐप्स के लिए वास्तव में मददगार हो सकता है जिनके लिए ssh सुरंगों, पोर्ट मैपिंग आदि की आवश्यकता होती है
ives

हाँ ऑटो + स्क्रीन मीठा स्थान होगा। इसके rscreenलिए ऑटोसह है ।
हयालसी

आटोश मश से बेहतर है। मैंने दोनों का उपयोग किया है।
श्रीधर सरनोबत

यहाँ जेसी कीटिंग की एक ब्लॉग पोस्ट है, जिसमें स्क्रीन के साथ ऑटोस का उपयोग किया गया है
सम्पाबलोक्पर

12

tmux

यह एक क्लासिक है। जब भी आप किसी टर्मिनल से कनेक्शन खोने का जोखिम चलाते हैं, तो इसका उपयोग करें।

$ tmux
$ sh do_something_that_takes_forever

!! Connection fails so you reconnect once you notice

$ tmux ls
0: 1 windows (created Tue Aug 23 12:39:52 2011) [103x30]

$ tmux attach -t 0

बस ऐसे ही, आप वापस कार्रवाई में हैं।


अनेक अनेक धन्यवाद! मैं कैसे tmux के साथ यह करने के लिए देख रहा था, क्योंकि ऐसा लगता है कि ज्यादातर लोग बेहतर विकल्प के रूप में क्या मानते हैं।
कूल ओप्पो

10

मैं आपकी समस्या को ठीक करने के लिए स्क्रीन स्थापित और प्रारंभ करूँगा। स्क्रीन आपको पिछले स्क्रीन सेशन को फिर से कनेक्ट करने देगा।

इसके अलावा, स्क्रीन भी लिया जाए तो आप अपनी स्क्रीन विभाजित की तरह शांत बातें, कंसोल आदि आप और अधिक जानकारी प्राप्त कर सकते देखते हैं यहाँ और यहाँ

शुरुआत के लिए, यदि आप डिस्कनेक्ट हो जाते हैं, तो आप उपयोग कर सकते हैं

screen -ls

अपने सत्रों को देखने के लिए और

screen -r ${session} 

एक डिस्कनेक्ट करने के लिए फिर से कनेक्ट करने के लिए।


4

जैसा कि दूसरों ने बताया है, स्क्रीन आम तौर पर इसके लिए सबसे अच्छा समाधान है और यह अन्य उपयोगी सुविधाओं के एक मेजबान को भी जोड़ता है।

आप अपनी प्रोफ़ाइल को दूरस्थ मशीन पर स्वचालित रूप से शुरू करने और / या लॉगिन पर स्क्रीन को फिर से कनेक्ट करने के लिए सेटअप कर सकते हैं, जो आपको स्क्रीन को एक बार शुरू करने के लिए भूल जाने से बचाता है क्योंकि आपको एक कनेक्शन ड्रॉप की आवश्यकता होती है।

Http://tlug.dnho.net/?q=node/239 देखें (या कई अन्य उदाहरणों के लिए Google को खोजें जो कुछ अलग तरीके से काम करती हैं)।


3

स्क्रीन के लिए एक और अधिक आधुनिक विकल्प, कुछ प्रकार के "वर्चुअलाइजेशन" के लिए उपलब्ध नहीं है (जैसे कि साइबरविन में आपके पास "स्क्रीन" हो सकती है, लेकिन इसे डिज़ाइन करने के तरीके के कारण "tmux" नहीं), लेकिन जहाँ भी आपके पास mmux स्थापित करने का विकल्प है , मैं दृढ़ता से उस एक स्क्रीन के लिए जाने की सलाह दूंगा।


3

यहां एक और गैर-स्क्रीन समाधान है।

पुट्टी ट्रे आपको बस ऐसा करने की अनुमति देती है, इसमें डिस्कनेक्ट विकल्प पर फिर से कनेक्ट होता है जो नियमित या पोटीन-एनजी में नहीं है

https://puttytray.goeswhere.com/

यह अन्य विकल्पों के साथ पोटीन का एक पूरी तरह से खुला स्रोत है), कनेक्शन सेटिंग्स पर जाएं और 2 विकल्प हैं, एक 'कनेक्शन विफलता पर पुन: कनेक्ट करने का प्रयास', और 'स्टार्टअप पर पुन: कनेक्ट करने का प्रयास' के लिए।


1
Ehh। क्या यह किसी भी संयोग से एक कीलॉगर और एक स्वचालित पीपीपी एक्सफिलिएशन उपयोगिता के साथ आता है?
हिरण हंटर

1
मैं मान रहा हूं कि अगर आप किसी तरह पूछ रहे हैं, तो आपका विवरण चुरा रहा है, यह पूरी तरह से खुला स्रोत है, स्रोत कोड जीथब पर उपलब्ध है यदि आप इसके github.com/FauxFaux/PuTTYTray को देखना चाहते हैं तो इसमें कुछ योगदानकर्ता हैं: )
munkiepus

महान चीयर्स :)
munkiepus

2

जबकि स्क्रीन आपके शेल सत्र को दूरस्थ सर्वर पर खुला रखेगा यदि आपका ssh सत्र ड्रॉप हो जाता है, तो यह ssh कनेक्शन की समस्या के बारे में कुछ भी नहीं करेगा। जैसा कि जीरो_आर बताता है, अपने एसएचएस कनेक्शन को एलाइव और लंबे समय के साथ बनाए रखने की कोशिश करें।

मेरा सुझाव है कि आप समस्याओं के कारण खोए हुए पैकेट के कारण को ट्रैक करें और इसके चारों ओर काम करने के बजाय इसे ठीक करें।


सलाह के लिये धन्यवाद। हम पैकेट खो जाने की मूल समस्या को ट्रैक करने पर काम कर रहे हैं, बस इसे पता लगाने में थोड़ा समय लग रहा है (बहुत मुश्किल है, यह एक!)। यह वास्तव में इस परेशानी की अवधि के लिए एक काम है। किसी को कभी नहीं पता होता है कि कुछ कब गिरा हुआ कनेक्शन देगा।
पैलेहोरस

1
यह बहुत अधिक शोर उत्पन्न करेगा, लेकिन आप स्ट्रीम के माध्यम से ssh चलाने की कोशिश कर सकते हैं और देखें कि यह क्या कर रहा है / ssh कनेक्शन ड्रॉप होने पर रिपोर्ट करता है। यह सिर्फ वही बता सकता है जो आप पहले से जानते हैं, लेकिन कौन जानता है ...
डेविड

1

कभी-कभी मैं स्क्रीन चलाना भी भूल गया और अपने अधूरे काम को भूल गया। इस मामले में, हालांकि हम एक टूटे हुए SSH सत्र को फिर से जारी नहीं कर सकते हैं, एक चल रहे कार्यक्रम को एक नए टर्मिनल में पुन: स्थापित कर सकते हैं और जो आप कर रहे थे उसे फिर से शुरू कर सकते हैं reptyr

गलती से एक SSH सत्र से डिस्कनेक्ट होने के बाद, पहली बात यह है screenकि ऐसा न हो कि कनेक्शन फिर से टूट जाए। फिर नए सत्र में, ps aux | grep {The process to be resumed}पीआईडी ​​पाने के लिए दौड़ें । पीआईडी ​​के साथ, आप काम जारी रखने के लिए reptyr {PID}या reptyr -T {PID}(यदि उपप्रक्रम हैं) कोशिश कर सकते हैं।

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