Ssh कनेक्शन टाइमआउट और GNOME टर्मिनल के ठंड से बचने का तरीका


235

जब मैं ssh के माध्यम से कुछ सर्वरों से जुड़ता हूं, तो यह टाइमआउट करता है और टर्मिनल को "जमा देता है" (इनपुट स्वीकार नहीं करता है, डिस्कनेक्ट नहीं करता है, ssh प्रक्रिया या कुछ भी मारने के लिए Ctrl-C नहीं कर सकता है)।

यह उबंटू में है, gnome-terminalहालांकि ऐसा लगता है कि यह टर्मिनल इनपुट / आउटपुट को रोक रहा है, और यह गनोम टर्मिनल सॉफ्टवेयर के संचालन को प्रभावित नहीं करता है। तो gnome-terminalssh के साथ एक कष्टप्रद असंगति की तुलना में कम बग ।

तो, क्या ssh कनेक्शन से टर्मिनल को रोकने / पुनः प्राप्त करने का एक तरीका है जो समय समाप्त हो गया है?


जवाबों:


256

sshd (सर्वर) कनेक्शन को बंद कर देता है यदि वह क्लाइंट से कुछ समय के लिए कुछ भी नहीं सुनता है। आप अपने क्लाइंट को एक बार सर्वर पर साइन-ऑफ-लाइफ सिग्नल भेजने के लिए कह सकते हैं।

इसके लिए कॉन्फ़िगरेशन फ़ाइल में है ~/.ssh/config। रिमोटहोस्ट करने के लिए हर चार मिनट में सिग्नल भेजने के लिए, अपने में निम्नलिखित डालें ~/.ssh/config

Host remotehost
  HostName remotehost.com
  ServerAliveInterval 240

यही मेरे अंदर है ~/.ssh/config

सभी होस्ट उपयोग के लिए इसे सक्षम करने के लिए:

Host *
  ServerAliveInterval 240

साथ ही चलाना सुनिश्चित करें chmod 600 ~/.ssh/config, क्योंकि कॉन्फिग फाइल विश्व-पठनीय नहीं होनी चाहिए।


1
धन्यवाद शब्द के साथ मेरी मदद करने के लिए धन्यवाद, यह बहुत सराहना की है। मैंने बदल दिया "" को "वापस नहीं करना चाहिए" नहीं करना चाहिए क्योंकि ssh फ़ाइल की अनुमतियों की जांच करता है और अगर यह दुनिया या समूह पठनीय है तो यह विफल हो जाता है।
लुडविग वेन्ज़िएरल

1
यह वह नहीं है जो ओपी ने पूछा था। वह निष्क्रियता के कारण बंद नहीं हो रहा है। वह कनेक्ट करने का प्रयास कर रहा है और उसका टर्मिनल जम रहा है।
सेरिन जूल

यह कहां है ~/.ssh/config?
यूजर

1
@User '~ /' आपके होम फ़ोल्डर का प्रतिनिधित्व करता है। '.ssh' आपके होम फ़ोल्डर के भीतर एक फ़ोल्डर है।
डब्ल्यूके

6
यदि आपका कनेक्शन वास्तव में खो रहा है तो यह बेकार है ...
so12311

248

प्रेस Enter, ~, .एक के बाद एक एक जमे हुए सत्र से डिस्कनेक्ट करने।

Ssh मैन पेज में अनुभाग "ESCAPE CHARACTERS" अंतर्निहित विवरणों की व्याख्या करता है।


40
यह उत्तर मुझे प्रश्न का सटीक उत्तर देने के लिए प्रकट होता है, और किसी भी मामले में, वह उत्तर था जिसकी मुझे तलाश थी।
5

ध्यान दें कि आप लाइन uncomment की जरूरत EscapeChar ~में /etc/ssh/ssh_config(या ~/.ssh/ssh_configअगर आप पसंद करते हैं)।
आदित्य एमपी

@adityamenon नहीं, EscapeChar ~पहले से ही अंतर्निहित डिफ़ॉल्ट है।
पीटर आइजेंट्राट

2
@ मर्क सवाल पूछते हैं "क्या टर्मिनल को ssh कनेक्शन से रोकने का कोई तरीका है जो समय समाप्त हो गया है ?" जोर मेरा।
१२:५५

2
आखिरकार यह सवाल के संदर्भ में गलत था, यह वही है जो मैं चाहता था।
सुबिन सेबेस्टियन

38

यहां तक ​​कि यह आपके सवाल का सीधा जवाब नहीं है, यह आपके द्वारा की गई समस्या से संबंधित है। कनेक्शन को जीवित रखने की कोशिश करने के बजाय (सभी कनेक्शन अंततः मर जाते हैं) आप टर्मिनल मल्टीप्लेक्सर्स का उपयोग कर सकते हैं, जैसे screenऔर tmuxकि सत्र को पृष्ठभूमि में जीवित रखें, भले ही आपका टर्मिनल काट दिया जाए।

अनिवार्य रूप से जब आप SSH सर्वर पर लॉगिन करते हैं तो आप तुरंत चलते हैं screenजो एक नया सत्र बनाएगा और संलग्न करेगा:

$ screen

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

$ screen -ls

एक सत्र के लिए रीटेट करने के लिए:

$ screen -r <session>

<session>पीआईडी ​​या सत्र का नाम कहां है। आप अपने सत्र के लिए फिर से जुड़ जाएँगे और जहाँ से आपने छोड़ा था, वहाँ से जारी रख सकते हैं!

तुम भी सत्र को अलग कर सकते हैं और घर से फिर से कनेक्ट कर सकते हैं सटीक बिंदु से लेने के लिए जहां आपने छोड़ा था। सत्र आप का उपयोग अलग करने C-aके बाद C-d(thats Control + Aऔर उसके बाद Control + D)।

नहीं है सरल ऑनलाइन ट्यूटोरियल के रूप में अच्छी तरह से।

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


2
एक और विकल्प mosh: mosh.mit.edu
लाश

यह विशेष रूप से उपयोगी है यदि आप एक हॉटस्पॉट या वाईफाई का उपयोग कर रहे हैं जो कभी-कभी बाहर निकलता है।
रान्डेल

11

-o ServerAliveInterval=30अपने कनेक्शन स्ट्रिंग को जोड़ने का प्रयास करें ( 3030 सेकंड का अर्थ है और निश्चित रूप से समायोजित किया जा सकता है)


5

आप SSH सर्वर की ओर से एक निष्क्रिय मध्यांतर अंतराल भी सेट कर सकते हैं:

फ़ाइल: /etc/ssh/ssh_config

सामग्री:

ClientAliveInterval XX
ClientAliveCountMax YY

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

इससे निष्कर्षित:

http://www.sysadmit.com/2016/02/linux-y-vmware-ssh-evitar-desconexion.html


1

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

आप ConnectTimeout 0कॉन्फ़िगरेशन फ़ाइल में सेट करने का प्रयास कर सकते हैं । मान 0 का अर्थ है कि कनेक्शन को अनिश्चित काल तक बंद रखा जाएगा।

आपकी कॉन्फ़िगरेशन (या ssh_config) फ़ाइल इस तरह दिख सकती है:

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