मैं ओएस एक्स टर्मिनल में एसएसएच सत्र को कैसे रोक सकता हूं?


101

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

लगभग पाँच मिनट में यह कहता है

Write failed: Broken pipe

और समाप्त होता है।

ऐसा तब भी होता है जब मैं लगभग पंद्रह मिनट में टर्मिनल में कुछ भी टाइप नहीं करता

क्या मैं OS X को इसके लिए मजबूर कर सकता हूं:

  1. SSH कनेक्शन को अधिक से अधिक समय तक जीवित रखें
  2. एक बार अनुत्तरदायी हो जाने पर इसे तुरंत मार दें

?

जवाबों:


121

कनेक्शन को जीवित रखने के लिए , आप /etc/ssh/ssh_configउस पंक्ति में जांच कर सकते हैं जहां वह कहता है ServerAliveInterval, जो आपको बताता है कि कनेक्शन को जीवित रखने के लिए आपका कंप्यूटर कितनी बार (सेकंड में) एक नल पैकेट भेजने वाला है। यदि आपके पास एक 0 है जो इंगित करता है कि आपका कंप्यूटर कनेक्शन को जीवित रखने की कोशिश नहीं कर रहा है (यह अक्षम है), अन्यथा यह आपको बताता है कि कितनी बार (सेकंड में) यह उपरोक्त पैकेट भेज रहा है। 120 या 240 में डालने का प्रयास करें, अगर यह अभी भी आपके कनेक्शन को मार रहा है, तो आप कम हो सकते हैं, शायद 5 तक, यदि उस संख्या के साथ ऐसा नहीं होता है, तो शायद यह आपका राउटर है जो मुफ्त मेमोरी के कनेक्शन को डंप कर रहा है।

इसे मारने के लिए जब यह लटका हो जाता है , तो आप ssh बच चरित्र का उपयोग कर सकते हैं:

~.

यही है, टिल्ड को दबाएं और फिर अवधि, अगर यह काम नहीं करता है, तो प्रेस करने से पहले Enter दबाएं, जो कि कनेक्शन को तुरंत मार देगा।


3
ठीक है, आप ~.महान टिप के साथ कनेक्शन को मार सकते हैं ! लेकिन यह वास्तव में क्या करता है?
कज़िन कोकीन

केवल एक चीज जिसके बारे में मैं उलझन में था, वह थी, मैं नहीं था कि मुझे sshd को फिर से शुरू करना पड़े, लेकिन ऐसा लगता है कि जैसे सत्र से बाहर निकलकर और फिर से जुड़ने से चाल
चली गई

अक्सर ~। कई मिनटों तक मेरे लिए काम नहीं करता है। ऐसा क्यों है?
श्रीधर सरनोबत

2
के स्थान ssh_configहै /etc/ssh/ssh_configमैक ओएस एक्स मैं इस सवाल का जवाब अपने आप को संपादित करेंगे पर है, लेकिन मैं इस साइट पर पर्याप्त प्रतिनिधि ऐसा करने के लिए नहीं है।
एरिक बी

क्या मुझे इसे क्लाइंट या सर्वर में रखना चाहिए? मुझे लगता है कि ग्राहक, लेकिन स्पष्ट हो सकता है।
यूरालप बीपी

23

आप ऐसा कर सकते हैं:

अपने सिस्टम को, सिस्टम-वाइड, सभी कनेक्शनों के लिए कॉन्फ़िगर करके संपादित करें: / etc / ssh / ssh_config और लाइन जोड़ें:

ServerAliveInterval 10

या, प्रति-सर्वर ~ /। Ssh / config

Host keepsdroppingme.com
   ServerAliveInterval 10

यह मूल रूप से क्या भेजता है यह जिंदा पैकेट रखता है, हर 10 सेकंड ...


9

तुम भी कमाल mosh परियोजना का उपयोग कर कोशिश कर सकते हैं । यह इनायत से नेटवर्क नुकसान, नींद आने वाली मशीनें आदि को संभाल लेगा और जब आपके पास फिर से काम करने का नेटवर्क होगा तो कनेक्शन को खुशी से बहाल कर देगा।

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


वास्तव में, यह वही है जो मैं अभी कर रहा हूं।
दान

5

यहाँ विभिन्न उत्तर विन्यास फाइल के सटीक मार्ग के संबंध में हैं। शायद यह अलग-अलग यूनिक्स में अलग है? मैं आपके सिस्टम पर मैन पेज पढ़ने का सुझाव देता हूं!

में आदमी ssh (1) , पाठ के लिए खोज: config । मेरे सिस्टम पर, मेरे पास सिस्टम-वाइड या इस-उपयोगकर्ता कॉन्फ़िगर फ़ाइलों का एक विकल्प है (और रास्ते अजीब तरह से भिन्न हैं)।

में आदमी ssh_config (5) :, पाठ के लिए खोज जिंदा । मेरे सिस्टम पर, ऐसा लगता है कि मुझे ServerAliveInterval और ServerAliveCountMax दोनों को सेट करने की आवश्यकता है ।

मेरे लिए क्या काम किया, macOS 10.12 Sierra पर, निम्नलिखित दो पंक्तियों को ~ / .ssh / config में रखना है:

ServerAliveInterval 20
ServerAliveCountMax 180

अब मैं अपने Ubuntu 16.04 सर्वर पर 20 * 180 सेकंड = 1 घंटे के लिए डिस्कनेक्ट नहीं कर सकता। मेरा दिन बना दिया!


3

नींद या वाईफाई रुकावट के बाद ssh को स्वचालित रूप से फिर से कनेक्ट करें

  1. MacPorts या Homebrew से स्वतः स्थापित करें :brew install autossh

  2. टर्मिनल खोलें और चलाएं autossh -M 20000 -f [SSH ARGUMENTS GO HERE]

  3. अपनी वाईफ़ाई को डिस्कनेक्ट करें या अपने मैक को सोने के लिए डालें।

  4. जब आप वाईफ़ाई को फिर से कनेक्ट करते हैं, तो ssh सत्र स्वचालित रूप से फिर से कनेक्ट हो जाएगा।


लॉगिन के बाद स्वचालित रूप से ssh

जब आप लॉगिन करते हैं तो जॉन स्टेसी ने ssh सत्र को स्वचालित रूप से सक्रिय करने के बारे में एक ब्लॉग पोस्ट लिखा था ।

  1. MacPorts या Homebrew से स्वतः स्थापित करें :brew install autossh

  2. एक बैश स्क्रिप्ट के साथ एक स्वचालित वर्कफ़्लो बनाएँ ।

ऑटोमेटर शेल स्क्रिप्ट

  1. सिस्टम प्राथमिकता में लॉगिन आइटम पर जाएं ।

सिस्टम वरीयताएँ> लॉगिन आइटम

  1. लॉगिन आइटम में अपने ऑटोमेटर वर्कफ़्लो को जोड़ें ।

आइटम लॉगिन करें


1

इन दो पंक्तियों को इसमें जोड़ें /etc/ssh/ssh_config:

ServerAliveInterval 60
TCPKeepAlive yes

1

इस समस्या को हल करने के बाद इन पंक्तियों को निम्न में जोड़ें $HOME/.ssh/config

Host *
  ServerAliveInterval 120
  TCPKeepAlive no

सेटिंग TCPKeepAlive noक्लाइंट को बताता है कि कनेक्शन को अभी भी मानना ​​है कि जब तक उपयोगकर्ता अनुरोध से अन्यथा साबित नहीं हो जाता है, तब तक अस्थायी कनेक्शन टूट जाता है, जबकि आपके ssh शब्द पृष्ठभूमि में बेकार बैठे हैं, कनेक्शन को नहीं मारेंगे।

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