कनेक्शन खो जाने और ssh चालू होने पर टर्मिनल हैंग


18

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

क्या टर्मिनल टैब को सक्रिय करने का कोई तरीका है, यानी स्थानीय शेल प्रक्रिया को जारी रखना है?

क्या टर्मिनल टैब को बंद करना एकमात्र तरीका है?

जवाबों:


20

SSH कनेक्शन निर्धारित समय सीमा ClientAliveIntervalऔर ClientAliveCountMaxमापदंडों और उनके क्लाइंट-साइड समकक्षों के बाद स्वचालित रूप से नीचे चला जाता है । यदि ये समयावधि काफी अधिक है, तो आप एक जमे हुए खोल का अनुभव करेंगे। हालाँकि, यदि आप उपयोग OpenSSHकरते हैं तो आपको टाइमआउट की प्रतीक्षा नहीं करनी है और भागने वाले पात्रों का उपयोग करके कनेक्शन बंद करने के लिए बाध्य कर सकते हैं :

ESCAPE CHARACTERS
When a pseudo-terminal has been requested, ssh supports a number
of functions through the use of an escape character.  A single
tilde character can be sent as ~~ or by following the tilde by a
character other than those described below. The escape character
must always follow a newline to be interpreted as special. The
escape character can be changed in configuration files using the
EscapeChar configuration directive or on the command line by the
-e option.
The supported escapes (assuming the default ‘~’) are:

~.
    Disconnect.
(...)

जब कनेक्शन फ़्रीज प्रेस करता है ~(इसका मतलब है कि Shift+ `कुंजियाँ एक साथ), तो इसे जारी करें और दबाएं .। वैकल्पिक रूप से, यदि आप एक अस्थिर कनेक्शन के साथ काम करते हैं या दूरस्थ सर्वर से हर समय कनेक्ट होने की आवश्यकता होती है, तो आप खोए हुए कनेक्शन को स्वचालित रूप से नवीनीकृत करने के लिए ऑटोस का उपयोग कर सकते हैं , यह बहुत सुविधाजनक है।

संपादित करें :

हालाँकि, यदि दोनों ClientAliveIntervalऔर ServerAliveIntervalस्पष्ट रूप से 0 पर सेट हैं या स्पष्ट रूप से सेट नहीं हैं और फिर डिफ़ॉल्ट रूप से sshd_configऔर ssh_configमैनपावर के अनुसार 0 पर सेट हैं , टाइमआउट सेटिंग्स निम्न फ़ाइलों ( http://tldp.org/HOWTO/TCP- से) में सेट की गई हैं रखवाले- HOWTO / usingkeepalive.html ):

  # cat /proc/sys/net/ipv4/tcp_keepalive_time
  7200

  # cat /proc/sys/net/ipv4/tcp_keepalive_intvl
  75

  # cat /proc/sys/net/ipv4/tcp_keepalive_probes
  9

  The first two parameters are expressed in seconds, and the last is
  the pure number. This means that the keepalive routines wait for
  two hours (7200 secs) before sending the first keepalive probe,
  and then resend it every 75 seconds. If no ACK response is
  received for nine consecutive times, the connection is marked as
  broken.

आप इन 3 फ़ाइलों को केवल उपयोग करके संशोधित कर सकते हैं echoऔर खुद देख सकते हैं कि इन मूल्यों के अनुसार एक जमे हुए SSH सत्र को डिस्कनेक्ट किया गया है।


6
मैं जोड़ना चाहूंगा कि ssh केवल शुरू में ही अपने एस्केप चरित्र को पहचानता है, या एंटर के बाद। जब एक ssh कनेक्शन अटक जाता है, तो Enter अक्सर होता है लेकिन हमेशा अंतिम वर्ण नहीं होता जिसे आपने पहले दबाया था। इसलिए संभवतः Enter ~ .कनेक्शन को समाप्त करने वाले अनुक्रम के रूप में उपयोग करने के लिए बेहतर है ।
एंगमॉन्ट

धन्यवाद। मैं अभी भी स्पष्ट नहीं कर रहा हूँ कैसे /proc/sys/net/ipv4/tcp_keepalive*फ़ाइलों और ClientAliveIntervalऔर ServerAliveInterval काम एक साथ? वे सभी एक ही सेटिंग्स के लिए अर्थात् ssh कनेक्शन जीवित रखने के लिए कर रहे हैं? क्या पूर्व फाइलें सिर्फ ssh कनेक्शन के लिए ही नहीं बल्कि अन्य TCP कनेक्शन के लिए भी हैं?
ऑल

एक और सवाल: "अगर ये टाइमआउट बहुत अधिक हैं तो आप एक जमे हुए खोल का अनुभव करेंगे।" "समय बहिष्कार काफी अधिक है" से आपका क्या तात्पर्य है? यदि समय की निर्दिष्ट अवधि के लिए गतिविधि की कमी है, तो शेल हमेशा जमे हुए नहीं है? या आप गतिविधि की कमी के कुछ मामलों के तहत मतलब है, खोल जमे हुए नहीं है, लेकिन स्वचालित रूप से बाहर निकलें?
सभी

@ समय: 1. /proc/sys/net/ipv4/tcp_keepalive*केवल के लिए नहीं है, ssh(d)लेकिन जैसा कि मैंने कहा कि दस्तावेज़ में कहते हैं:Remember that keepalive support, even if configured in the kernel, is not the default behavior in Linux. Programs must request keepalive control for their sockets using the setsockopt interface. There are relatively few programs implementing keepalive, but you can easily add keepalive support for most of them following the instructions explained later in this document.
Arkadiusz Drabczyk

@ समय: 2. उच्च का मतलब है 2 घंटे उदाहरण के लिए - सत्र समाप्त होने से पहले आपको 2 घंटे इंतजार करना होगा। एक परीक्षण करें - एक दूरस्थ होस्ट से कनेक्ट करें, रिमोट sshdपर मारें या एक केबल निकालें और जांच लें कि एक जमे हुए ssh सत्र खुद से बाहर निकल जाएगा। तक frozen shellमैं मतलब खोल कि प्रयोग में नहीं है, किसी भी कुंजी नहीं ले करता है और कुछ भी प्रिंट नहीं है।
अर्कादियुस डेर्ब्स्की
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.