एसएसएच कनेक्शन पर "लिखने में विफल: टूटी हुई पाइप" को कैसे रोकें?

रोकने के लिए क्लाइंट और सर्वर दोनों पर एसएसएच को कॉन्फ़िगर करने के लिए मैं क्या कर सकता हूं Write Failed: broken pipe त्रुटियाँ? यह अक्सर तब होता है जब आप अपने क्लाइंट कंप्यूटर को सोते हैं और बाद में फिर से शुरू करते हैं ।

मैंने इसमें कोशिश की है /etc/ssh/ssh_config लिनक्स और मैक के लिए:

Host *ServerAliveInterval 120

यह कितनी बार, सेकंड में, इसे सर्वर पर एक रख-रखाव संदेश भेजना चाहिए । यदि वह काम नहीं करता है तो काम करते समय हर दो मिनट में एंटर दबाने के लिए एक बंदर को प्रशिक्षित करें ।

आप या तो सेट कर सकते हैं ServerAliveInterval में /etc/ssh/ssh_config ग्राहक मशीन की या ClientAliveInterval में /etc/ssh/sshd_config सर्वर मशीन की । यदि आपको अभी भी त्रुटि मिल रही है तो अंतराल को कम करने का प्रयास करें ।

एकल उपयोगकर्ता के लिए कॉन्फ़िगरेशन फ़ाइल में सेट किया जा सकता है ~/.ssh/config सर्वर और क्लाइंट साइड दोनों पर । सुनिश्चित करें कि फ़ाइल में सही अनुमतियाँ हैं chmod 644 ~/.ssh/config.

एसएसएच सत्र कई और संभवतः अपरिहार्य कारणों से टूट सकते हैं ।

एक उपयोगी उपयोगिता जिसका उपयोग इसके कारण होने वाली समस्याओं को कम करने के लिए किया जा सकता है, कहलाती है screen. स्क्रीन एक शक्तिशाली उपयोगिता है जो आपको कई टर्मिनलों को नियंत्रित करने की अनुमति देती है जो एसएसएच सत्र से स्वतंत्र रूप से जीवित रहेंगे । उदाहरण के लिए, यदि आप दौड़ते हैं screen एसएसएच सत्र में आपको एक नया टर्मिनल खुला दिखाई देगा और आप इसका उपयोग नौकरी चलाने के लिए कर सकते हैं । मान लें कि आपका एसएसएच सत्र प्रक्रिया में मर जाता है । चल रहा है screen -d फिर screen -r पिछले सत्र को फिर से खोल देगा और आप वहां से जारी रख पाएंगे । सुनिश्चित करें कि आप पढ़ें कुछ दस्तावेज इसका उपयोग करने से पहले ।

क्लाइंट कॉन्फ़िगरेशन

फ़ाइल बनाने का प्रयास करें:

~/.ssh/config

सामग्री जोड़ें:

Host *  ServerAliveInterval 30  ServerAliveCountMax 5

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

यदि पूर्ववर्ती 30 सेकंड (जैसा कि ऊपर निर्दिष्ट किया गया है) में कोई पैकेट प्राप्त नहीं हुआ है, तो यह सर्वर को एक हैलो-आर-यू-वहां सिग्नल भेजेगा । हालांकि, अगर लगातार हैलो-आर-यू-वहां सिग्नल की संख्या सर्वरलाइवकाउंटमैक्स तक पहुंच जाती है तो एसएसएच सर्वर से डिस्कनेक्ट हो जाएगा । यह मान 3 (सर्वर गतिविधि के बिना 3*30 = 90 सेकंड) के लिए डिफ़ॉल्ट है, अगर यह आपकी आवश्यकताओं के अनुरूप है तो इसे बढ़ाएं । वहाँ बहुत अधिक विन्यास विकल्प हैं .एसएसएच / कॉन्फ़िगरेशन फ़ाइल और आप पढ़ सकते हैं:

एसएसएच कॉन्फ़िगरेशन फ़ाइल का उपयोग करना

अन्य विकल्पों पर अधिक जानकारी के लिए । आप इसे हर उस सर्वर पर लागू नहीं करना चाहते हैं जिससे आप कनेक्ट करते हैं जिससे यह उदाहरण होगा । या लाइन को बदलकर इसे केवल एक विशेष सर्वर पर रोकें Host * साथ में Host <IP> (एक आईपी पते से बदलें, एसएसएच_कॉन्फिग मैन पेज देखें) ।

सर्वर कॉन्फ़िगरेशन

इसी तरह आप सर्वर को अपने ग्राहकों के साथ कोमल होने के लिए कह सकते हैं । कॉन्फ़िगरेशन फ़ाइल है /etc/ssh/sshd_config.

ClientAliveInterval 20ClientAliveCountMax 5

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

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

TCPKeepAlive yes

में

/etc/ssh/ssh_config

आशा है कि इससे मदद मिलेगी

क्लाइंट के लिए, अपना संपादित करें ~/.ssh/config (या /etc/ssh/ssh_config) पालन के रूप में फ़ाइल:

Host *  TCPKeepAlive yes  ServerAliveInterval 120

टीसीपीकेपलाइव - निर्दिष्ट करता है कि क्या सिस्टम को दूसरी तरफ टीसीपी कीपलाइव संदेश भेजना चाहिए । यदि उन्हें भेजा जाता है, तो मशीनों में से किसी एक के कनेक्शन या दुर्घटना की मृत्यु ठीक से देखी जाएगी । हालांकि, इसका मतलब है कि यदि मार्ग अस्थायी रूप से नीचे है, तो कनेक्शन मर जाएगा, और कुछ लोगों को यह कष्टप्रद लगता है (डिफ़ॉल्ट 'हां'है) ।

सर्वरलाइवइंटरवल - सेकंड में एक टाइमआउट अंतराल सेट करता है जिसके बाद यदि सर्वर से कोई डेटा प्राप्त नहीं हुआ है, तो एसएसएच(1) सर्वर से प्रतिक्रिया का अनुरोध करने के लिए एन्क्रिप्टेड चैनल के माध्यम से एक संदेश भेजेगा । डिफ़ॉल्ट 0 है, यह दर्शाता है कि ये संदेश सर्वर पर नहीं भेजे जाएंगे ।


सर्वर के लिए, अपना संपादित करें /etc/ssh/sshd_config के रूप में:

ClientAliveInterval 600ClientAliveCountMax 0

यदि आप चाहते हैं कि एसएसएच क्लाइंट 10 मिनट (600 सेकंड) के बाद स्वचालित रूप से बाहर निकलें (टाइमआउट) ।

क्लाइंटलाइवकाउंटमैक्स - यह एसएसएच क्लाइंट से कोई प्रतिक्रिया प्राप्त किए बिना एसएसएच सर्वर द्वारा भेजे गए चेकलाइव संदेश की कुल संख्या को इंगित करता है । डिफ़ॉल्ट 3 है ।

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


यह भी देखें: विकल्प क्या करते हैं ServerAliveInterval और ClientAliveInterval एसएसएचडी_कॉन्फिग में, ठीक है?

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

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

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

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

एमओएसएच मुफ्त सॉफ्टवेयर है, जो जीएनयू/लिनक्स, फ्रीबीएसडी, सोलारिस, मैक ओएस एक्स और एंड्रॉइड के लिए उपलब्ध है ।

मेरे लिए, मैं हो रहा था Write failed: Broken pipe यहां तक कि जब मैं सक्रिय रूप से विम में या शेल प्रॉम्प्ट पर टाइप कर रहा था । मैं थोड़ी देर के लिए भी स्थानीय रूप से इंटरनेट ब्राउज़ नहीं कर सका । (मैं टर्मिनल का उपयोग करके उबंटू से दूरस्थ रूप से कनेक्ट कर रहा था । )

मेरे नेटवर्क के अन्य लोग नेटफ्लिक्स और अन्य स्थानों से बहुत सारे वीडियो स्ट्रीम करते हैं । मैं इसे साबित नहीं कर सकता, लेकिन मुझे इसकी आईएसपी या राउटर समस्या पर संदेह है । उदाहरण के लिए, वेरिज़ोन और नेटफ्लिक्स अपने ग्राहक की नेटवर्क समस्याओं के लिए एक दूसरे पर उंगलियां उठा रहे हैं ।

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

मैंने अपना जवाब यहां पोस्ट किया, क्योंकि यह उबंटू वीएम नहीं था ।

https://unix.stackexchange.com/questions/259225/packet-write-wait-broken-pipe-even-leaving-top-running

ssh -o IPQoS=throughput user@host

मेरे पास रिमोट सर्वर पर एक स्क्रिप्ट है जो एसएसएच कॉन्फ़िगरेशन क्लाइंट या सर्वर की परवाह किए बिना कभी भी विफल नहीं होती है ।

#!/bin/bashwhile true; do date; sleep 10; done;

इसे कुछ में सहेजें dummy.sh विंडो को छोटा करने या उससे दूर जाने से पहले फ़ाइल को जल्दी से चलाएं । यह सर्वर पर वर्तमान समय की मुहर को प्रिंट करता रहेगा और आपके कनेक्शन को तब तक जीवित रखेगा जब तक कनेक्शन किसी अन्य कारण से नहीं गिरा दिया जाता है । जब आप उस टर्मिनल पर वापस आते हैं, तो बस हिट करें सीटीआरएल+सी और काम करते रहें ।

जब भी आप एसएसएच का आह्वान करते हैं तो आप इन तर्कों को जोड़ सकते हैं: -o ServerAliveInterval=15 -o ServerAliveCountMax=3

यदि आप ऐसा करते हैं तो आपको /आदि/एसएसएच/*कॉन्फ़िगरेशन फ़ाइलों को संपादित नहीं करना होगा ।

आप इसे आसान बनाने के लिए एक बैश उपनाम या फ़ंक्शन या स्क्रिप्ट बना सकते हैं ।

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

do_ssh() {    ssh -o ServerAliveInterval=15 -o ServerAliveCountMax=3 $*}do_ssh_pty() {    ssh -tt -o "BatchMode=yes" -o "StrictHostKeyChecking=no" -o ServerAliveInterval=15 -o ServerAliveCountMax=3 $*}

अब do_ssh user@host इस्तेमाल किया जा सकता या do_ssh user@host <args> <command> और रखवाले सक्रिय होंगे ।

डेविड आपको रेंटिंग से पहले प्रश्नों को बेहतर ढंग से पढ़ना चाहिए । आपकी समस्या ओपी के समान नहीं है, जो स्पष्ट रूप से कंप्यूटर को सोने के लिए उल्लेख करता है । जिस तरह से केवल एक उत्तर पता (“मोश”), और यह प्रश्न के 2 साल बाद पोस्ट किया गया था । हालाँकि अन्य उत्तर अगली सबसे अच्छी बात करते हैं, जो उन मामलों के समाधान का प्रस्ताव कर रहा है जिन्हें आपकी तरह अधिक आसानी से हल किया जा सकता है । शांत हो जाओ, इतना तनावग्रस्त मत हो, शेख़ी यहाँ कोई अच्छा काम नहीं करता है । …

वास्तव में कुछ भी नहीं । सत्र बाधित था, और सत्र की सुरक्षा से समझौता किया गया था । यदि आप कंप्यूटर अनुप्रयोग डाल नहीं सोने के लिए आप सेट कर सकते हैं एक जीवित समय रखने के लिए ग्राहक के लिए शूट करने के लिए एक जिंदा दिल की धड़कन रखने के लिए सर्वर, लेकिन अगर प्रणाली के लिए सो जा रहा है तो वहाँ कुछ भी नहीं है कि किया जा सकता है.

आप लोग गलत हैं: मेरे पास एक ही सर्वर से कनेक्ट होने वाली दो डेस्कटॉप क्लाइंट मशीनें हैं । एक उबंटू 12.10, क्वांटल है, जिसका एसएसएच क्लाइंट अच्छी तरह से काम करता है, और घंटों तक कनेक्शन रखता है । दूसरा उबंटू 14.10 है, यूटोपिक, बस एक तरफ और एक ताजा इंस्टॉल में; कुछ मिनटों के बाद, यह इस संदेश के साथ खुद को ब्लॉक करता है । मशीन में बाकी नेटवर्क फ़ंक्शन बाधित नहीं हैं । तो नहीं, यह न तो नेटवर्क की समस्या है, न ही सर्वर की समस्या है, बल्कि एक विशिष्ट एसएसएच क्लाइंट सॉफ़्टवेयर समस्या है, जिसे हल किया जा सकता है, जो “डार्कड्रगन” कहने की हिम्मत के विपरीत है, कि “कुछ भी नहीं किया जा सकता” ।

इस मामले में मैं कुछ ऐसा ढूंढ रहा हूं जो मुझे टूटे हुए एसएसएच कनेक्शन (शायद निकास कोड पर आधारित) को फिर से शुरू करने और स्क्रीनका उपयोग करके पुनर्स्थापित करने की अनुमति देगा?

और वास्तव में, जैसा कि मैंने कहा: लोग बहुत ज्यादा बात करते हैं जब वे कहते हैं कि “कुछ भी नहीं किया जा सकता”, जैसे @डार्कड्रगन ने हिम्मत की । मैंने अराम कोचरन का जवाब पढ़ा, और मैंने इसे लागू किया: 20 मिनट पहले । … मुझे एहसास हुआ कि मेरे पुराने क्वांटल उबंटू 12.10 में, मैंने उस निर्देश को उस फ़ाइल में लागू किया था [मैंने अभी जांच की थी], दो साल पहले, और यही वहां स्थिरता का कारण था । मैंने इसे यहां किया, और इन अंतिम 20 मिनटों में, कनेक्शन तब से स्थिर है । तो कृपया, लोग: यह सोचने की हिम्मत करते हुए कि “कुछ नहीं किया जा सकता”, और उस संदेश को अन्य लोगों पर छोड़ने की कोशिश करते समय और भी अधिक बचना चाहिए ।

@ डेविडल इस बात से सहमत हैं कि अज्ञानता की स्थिति से परेशान, ईएसपी हो सकता है ।

हालाँकि, यह भी लगता है कि आपने इसे व्यक्तिगत रूप से थोड़ा सा लिया (उर्फ एक बालक रंटी) । डार्कड्रैगन प्रोब का मतलब अच्छी तरह से था

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

निम्नलिखित स्थिति के रूप में कुछ भी सुखद नहीं है । एक व्यक्ति कह रहा है:" यह नहीं किया जा सकता / कुछ भी नहीं किया जा सकता", किसी ने यह कहते हुए उत्तर दिया या बाधित किया: "देखो । … यह हो गया है, और यह आसान था " @डार्कड्रगन

नेटवर्क में एक ही समस्या जब एक ही पते के साथ दो डिवाइस ।
उनमें से एक को बंद करें और समस्या हल हो गई है ।