Write Failed: broken pipe
त्रुटियों को रोकने के लिए मैं क्लाइंट और सर्वर दोनों पर SSH को कॉन्फ़िगर करने के लिए क्या कर सकता हूं ? यह अक्सर तब होता है जब आप अपने क्लाइंट कंप्यूटर को सोते हैं और बाद में फिर से शुरू करते हैं।
screen
?
Write Failed: broken pipe
त्रुटियों को रोकने के लिए मैं क्लाइंट और सर्वर दोनों पर SSH को कॉन्फ़िगर करने के लिए क्या कर सकता हूं ? यह अक्सर तब होता है जब आप अपने क्लाइंट कंप्यूटर को सोते हैं और बाद में फिर से शुरू करते हैं।
screen
?
जवाबों:
मैंने /etc/ssh/ssh_config
लिनक्स और मैक के लिए यह कोशिश की है :
Host *
ServerAliveInterval 120
यह कितनी बार, सेकंड में, इसे सर्वर को एक संदेश रखना चाहिए। यदि वह काम नहीं करता है तो एक बंदर को प्रशिक्षित करें कि आप काम करते समय हर दो मिनट में प्रवेश करें।
आप या तो सेट कर सकते हैं ServerAliveInterval
में /etc/ssh/ssh_config
क्लाइंट मशीन की या ClientAliveInterval
में /etc/ssh/sshd_config
सर्वर मशीन की। यदि आप अभी भी त्रुटि प्राप्त कर रहे हैं, तो अंतराल को कम करने का प्रयास करें।
एक एकल उपयोगकर्ता के लिए कॉन्फ़िगरेशन ~/.ssh/config
सर्वर और क्लाइंट दोनों तरफ फ़ाइल में सेट किया जा सकता है । सुनिश्चित करें कि फ़ाइल में सही अनुमतियां हैं chmod 644 ~/.ssh/config
।
Bad configuration option: ClientAliveInterval
Bad configuration option
OSX 10.8.4 पर वही त्रुटि मिलती है।
SSH सत्र कई और संभवतः अपरिहार्य कारणों से टूट सकते हैं।
एक उपयोगी उपयोगिता जिसका उपयोग इसके कारण होने वाली समस्याओं को कम करने के लिए किया जा सकता है screen
। स्क्रीन एक शक्तिशाली उपयोगिता है जो आपको कई टर्मिनलों को नियंत्रित करने की अनुमति देती है जो ssh सत्र से स्वतंत्र रूप से जीवित रहेंगे। उदाहरण के लिए, यदि आप screen
ssh सत्र में भाग लेते हैं तो आपको एक नया टर्मिनल खुला दिखाई देगा और आप इसका उपयोग नौकरियों को चलाने के लिए कर सकते हैं। कहते हैं कि आपके ssh सत्र की प्रक्रिया में मृत्यु हो जाती है। screen -d
फिर दौड़ना screen -r
पिछले सत्र को फिर से खोल देगा और आप वहां से जारी रख पाएंगे। सुनिश्चित करें कि आप इसे उपयोग करने से पहले कुछ प्रलेखन पढ़ें ।
screen -d -r
से अपने पिछले सत्र को पुनर्प्राप्त करने के लिए चला सकते हैं ।
screen -dr
। या screen -x
आप जो कर रहे हैं उसके आधार पर। मुद्दा यह है कि किसी को यह जानना चाहिए कि वे सभी स्विच क्या करते हैं, ताकि व्यक्ति उचित उपयोग कर सके और न केवल नेत्रहीन लोगों के सुझावों का पालन करें। : वहाँ एक अच्छा कॉम्पैक्ट सारांश उपलब्ध यहाँ है ss64.com/bash/screen.html
ग्राहक विन्यास
फ़ाइल बनाने का प्रयास करें:
~/.ssh/config
सामग्री जोड़ें:
Host *
ServerAliveInterval 30
ServerAliveCountMax 5
अब अपने सर्वर पर जाएं और देखें कि क्या आपकी समस्या ठीक हो गई है। ClientAliveInterval विकल्प केवल ssh सर्वर (उर्फ sshd) को कॉन्फ़िगर करने के लिए उपयोगी है, यह ssh क्लाइंट की तरफ एक चीज़ को नहीं बदलता है, इसलिए इसे उपरोक्त कॉन्फ़िगरेशन फ़ाइल में उपयोग न करें।
यह सर्वर को एक हेल्लो-ए-यू-वहाँ सिग्नल भेजेगा यदि कोई पैकेट पूर्ववर्ती 30 सेकंड में प्राप्त नहीं हुआ है (जैसा कि ऊपर निर्दिष्ट किया गया है)। हालाँकि, यदि लगातार हेलो-ए-यू-सी सिग्नलों की संख्या ServerAliveCountMax तक पहुंचती है, तो ssh सर्वर से डिस्कनेक्ट हो जाएगा। यह मान 3 के लिए डिफ़ॉल्ट है (इसलिए सर्वर गतिविधि के बिना 3 * 30 = 90 सेकंड), इसे बढ़ाएं यदि यह आपकी आवश्यकताओं के अनुरूप है। .Ssh / config फाइल के लिए और अधिक विन्यास विकल्प हैं और आप पढ़ सकते हैं:
SSH कॉन्फ़िग फ़ाइल का उपयोग करना
अन्य विकल्पों पर अधिक जानकारी के लिए। आप इसे हर उस सर्वर पर लागू नहीं करना चाहेंगे जिसे आप कनेक्ट करते हैं जो यह उदाहरण देगा। या केवल एक विशेष सर्वर के Host *
साथ लाइन को बदलकर Host <IP>
(आईपी पते से बदलें, ssh_config मैन पेज देखें)।
सर्वर कॉन्फ़िगरेशन
इसी तरह आप सर्वर को अपने ग्राहकों के साथ कोमल होने के लिए कह सकते हैं। कॉन्फ़िगरेशन फ़ाइल है /etc/ssh/sshd_config
।
ClientAliveInterval 20
ClientAliveCountMax 5
आप सेट करके आप उसे निष्क्रिय कर सकते हैं या तो ClientAliveInterval
करने के लिए 0
या tweak ClientAliveInterval
और ClientAliveCountMax
जांच का जवाब देने के बिना एक अधिकतम SSH ग्राहक निष्क्रियता स्थापित करने के लिए। TCPKeepAlive पर इस सेटिंग का एक फायदा यह है कि सिग्नल एन्क्रिप्टेड चैनलों के माध्यम से भेजे जाते हैं, इसलिए इसके खराब होने की संभावना कम होती है।
मैं दूरस्थ रूप से उबंटू सर्वर को चमकदार से सटीक रूप से अपग्रेड कर रहा हूं और अपग्रेड के मध्य में "राइट फेल। ब्रोकेन पाइप" के साथ ssh कनेक्शन खो दिया है। ClientAliveInterval और ServerAliveInterval ने कुछ नहीं किया। समाधान ग्राहक ssh में TCPKeepAlive विकल्पों को चालू करना है:
TCPKeepAlive yes
में
/etc/ssh/ssh_config
क्लाइंट के लिए, अपनी ~/.ssh/config
(या /etc/ssh/ssh_config
) फ़ाइल को निम्नानुसार संपादित करें:
Host *
TCPKeepAlive yes
ServerAliveInterval 120
TCPKeepAlive - निर्दिष्ट करता है कि क्या सिस्टम को दूसरी तरफ टीसीपी रखने के संदेश भेजने चाहिए। यदि उन्हें भेजा जाता है, तो किसी एक मशीन के कनेक्शन या दुर्घटना की मृत्यु को ठीक से देखा जाएगा। हालांकि, इसका मतलब है कि यदि मार्ग अस्थायी रूप से नीचे है, तो कनेक्शन मर जाएगा, और कुछ लोगों को यह कष्टप्रद लगता है (डिफ़ॉल्ट 'हां' है)।
ServerAliveInterval - सेकंड में एक टाइमआउट अंतराल सेट करता है जिसके बाद यदि सर्वर से कोई डेटा प्राप्त नहीं हुआ है, तो ssh (1) एन्क्रिप्टेड चैनल के माध्यम से सर्वर से प्रतिक्रिया का अनुरोध करने के लिए एक संदेश भेजेगा। डिफ़ॉल्ट 0 है, यह दर्शाता है कि ये संदेश सर्वर पर नहीं भेजे जाएंगे।
सर्वर के लिए, अपने /etc/ssh/sshd_config
रूप को संपादित करें :
ClientAliveInterval 600
ClientAliveCountMax 0
यदि आप ssh क्लाइंट को 10 मिनट (600 सेकंड) के बाद स्वचालित रूप से बाहर (टाइमआउट) करना चाहते हैं।
ClientAliveCountMax - यह ssh क्लाइंट की किसी भी प्रतिक्रिया को प्राप्त किए बिना ssh सर्वर द्वारा भेजे गए जाँच संदेश की कुल संख्या को इंगित करता है। डिफ़ॉल्ट 3 है।
ClientAliveInterval - यह सेकंड में टाइमआउट को इंगित करता है। सेकंड के x संख्या के बाद, ssh सर्वर क्लाइंट को प्रतिक्रिया के लिए एक संदेश भेजेगा। बहरापन 0 है (सर्वर जाँच करने के लिए क्लाइंट को संदेश नहीं भेजेगा।)
यह भी देखें: विकल्प ServerAliveInterval
और ClientAliveInterval
sshd_config में क्या करते हैं, ठीक है?
मुझे मोश से बिल्कुल प्यार है। मैं अक्सर एक सर्वर में ssh करता हूं, अपना लैपटॉप बंद करता हूं और एक कैफे में जाता हूं, इसे खोलता हूं और ले जाता हूं जैसे कि कुछ भी नहीं बदला।
मोश (मोबाइल शेल)
रिमोट टर्मिनल एप्लिकेशन जो रोमिंग की अनुमति देता है , आंतरायिक संपर्क का समर्थन करता है , और उपयोगकर्ता कीस्ट्रोक्स के बुद्धिमान स्थानीय गूंज और लाइन संपादन प्रदान करता है ।
Mosh SSH के लिए एक प्रतिस्थापन है। यह अधिक मजबूत और उत्तरदायी है, विशेष रूप से वाई-फाई, सेलुलर और लंबी दूरी की लिंक पर।
Mosh मुफ्त सॉफ्टवेयर है, जो GNU / Linux, FreeBSD, Solaris, Mac OS X और Android के लिए उपलब्ध है।
मेरे लिए, मैं Write failed: Broken pipe
तब भी मिल रहा था जब मैं सक्रिय रूप से टाइप कर रहा था या शेल प्रॉम्प्ट पर। मैं थोड़ी देर के लिए या तो इंटरनेट को स्थानीय रूप से ब्राउज़ नहीं कर सकता था। (मैं टर्मिनल का उपयोग करके दूर से उबंटू से जुड़ रहा था।)
मेरे नेटवर्क के अन्य लोग नेटफ्लिक्स और अन्य स्थानों से बहुत सारे वीडियो स्ट्रीम करते हैं। मैं इसे साबित नहीं कर सकता, लेकिन मुझे इसके ISP या राउटर मुद्दे पर संदेह है। उदाहरण के लिए, वेरिज़ोन और नेटफ्लिक्स अपने ग्राहक की नेटवर्क समस्याओं के लिए एक-दूसरे पर उंगलियां उठा रहे हैं।
यदि आपको एक डायल-अप कनेक्शन मिल गया है और एक साथ SSH या टेलनेट कनेक्शन के साथ वीडियो या संगीत स्ट्रीमिंग कर रहे हैं, तो कुछ बिंदु पर यह अवश्यंभावी है कि आपको टूटा हुआ पाइप संदेश मिल जाएगा। मेरे ISPs ब्रॉडबैंड पैकेज को अपग्रेड करने से मेरे टूटे हुए कनेक्शन को कम बार लग रहा था।
मेरे पास दूरस्थ सर्वर पर एक स्क्रिप्ट है जो एसएसएच कॉन्फ़िगरेशन क्लाइंट या सर्वर की परवाह किए बिना कभी भी विफल नहीं होती है।
#!/bin/bash
while true; do date; sleep 10; done;
कुछ डमी फ़ाइल में सहेजें और विंडो को छोटा करने या इससे दूर जाने से पहले इसे तुरंत चलाएं। यह सर्वर पर करंट टाइम स्टैम्प को प्रिंट करता रहेगा और आपके कनेक्शन को तब तक जीवित रखेगा जब तक कि किसी अन्य कारण से कनेक्शन को न गिरा दिया जाए। जब आप उस टर्मिनल पर वापस आते हैं, तो बस CTRL + C को हिट करें और काम करते रहें।
top
भागना छोड़ दें
मैंने अपना जवाब यहां पोस्ट किया, क्योंकि यह उबंटू वीएम नहीं था।
ssh -o IPQoS=throughput user@host
हर बार जब आप ssh का आह्वान करते हैं, तो आप ये आर्गन जोड़ सकते हैं: -o ServerAliveInterval=15 -o ServerAliveCountMax=3
यदि आप ऐसा करते हैं तो आपको / etc / ssh / * config फाइल को संपादित करने की आवश्यकता नहीं है।
इसे आसान बनाने के लिए आप एक बैश उपनाम या फ़ंक्शन या स्क्रिप्ट बना सकते हैं।
उदाहरण के लिए ये बैश फ़ंक्शंस, आप अपने .bashrc में जोड़ सकते हैं, do_ssh का उपयोग मैन्युअल रूप से रखने के लिए किया जाता है। do_ssh_pty का उपयोग स्क्रिप्ट में pty सेट करने और संकेतों से बचने के लिए किया जाता है।
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>
रखवाले सक्रिय हो जाएंगे।