سؤال كيف تمنع "الكتابة فشلت: كسر الأنابيب" على اتصال SSH؟


ما الذي يمكنني القيام به لتكوين SSH على كل من العميل والخوادم لمنع ذلك Write Failed: broken pipe أخطاء؟ يحدث ذلك غالبًا إذا كنت تنام كمبيوتر العميل وتستأنف في وقت لاحق.


232
2018-04-28 23:36


الأصل


لا شيئا حقا. تمت مقاطعة الجلسة وتم اختراق أمان الجلسة. إذا كنت لا تضع شركات للنوم يمكنك ضبط وقتك على البقاء على قيد الحياة للعميل لتصوير نبضات القلب على الخادم ، ولكن إذا كان النظام ينام فلن يكون هناك أي شيء يمكن القيام به. - darkdragn
في هذه الحالة ، أبحث عن شيء يسمح لي بإعادة بدء اتصال ssh مكسور (استنادًا إلى رمز الإنهاء على الأرجح) واستعادته باستخدام screen؟ - sorin
أنت شخص ما على خطأ: لدي جهازين عميل سطح المكتب يتصلان بخادم SAME. واحد هو أوبونتو 12.10 ، Quantal ، الذي يعمل عميل SSH بشكل جيد ، ويحافظ على الاتصال لساعات. والآخر هو Ubuntu 14.10 ، Utopic ، فقط جانبا الآخر وفي تثبيت جديد ؛ بعد بضع دقائق ، يحجب نفسه بهذه الرسالة. لا تتم مقاطعة بقية وظائف الشبكة في الجهاز. لذا لا ، إنها ليست مشكلة في الشبكة ، ولا مشكلة في الخادم ، ولكن مشكلة معينة في برنامج SSH ، والتي يمكن حلها ، مقابل ما يجرؤ "darkdragan" على القول بأنه "لا يمكن فعل شيء". - David L
وبالفعل ، كما قلت ، يتحدث الناس كثيرًا عندما يقولون "لا يمكن فعل شيء" ، تمامًا كما تجرأdarkdragn. لقد قرأت إجابة آرام كوشاريان ، وقمت بتطبيقها: قبل 20 دقيقة ... أدركت أنه في بلدي أوبانتي الكوانتي القديم 12.10 ، كنت قد طبقت تلك التعليمات في هذا الملف [لقد تحققت للتو] ، قبل عامين ، وكان ذلك سبب الاستقرار هناك. لقد فعلت ذلك هنا ، وفي هذه الدقائق العشرين الأخيرة ، كان الاتصال مستقرًا منذ ذلك الحين. لذا رجاءً ، الناس: امتنعوا عن أنفسهم عندما تجرأوا على التفكير بأنه "لا يمكن فعل شيء" ، وأن تمتنعوا أكثر عند محاولة ترك هذه الرسالة لأشخاص آخرين. - David L
DavidL يجب عليك قراءة الأسئلة بشكل أفضل قبل الصراخ. إن مشكلتك ليست هي نفسها مشكلة OP ، التي تذكر بوضوح وضع الكمبيوتر في وضع السكون. الذي بالمناسبة فقط واحد من الإجابات عنوان ("موشي") ، وتم نشره بعد 2 سنوات من السؤال. ومع ذلك ، فإن الإجابات الأخرى تفعل الشيء التالي الأفضل ، وهو اقتراح حلول للحالات التي يمكن حلها بسهولة أكبر ، مثل حالتك. أهدأ ، لا تكن متوتراً جداً ، لا تفعل الصراخ أي شيء جيد هنا ... - msb


الأجوبة:


لقد حاولت هذا في /etc/ssh/ssh_config لنظامي التشغيل Linux و Mac:

Host *
ServerAliveInterval 120

هذا هو عدد المرات ، في ثوان ، يجب إرسال رسالة تنبيه إلى الخادم. إذا لم يفلح ذلك ، قم بتدريب قرد للضغط على كل دقيقتين أثناء العمل.

هل يمكن أن تحدد إما ServerAliveInterval في /etc/ssh/ssh_config من جهاز العميل أو ClientAliveInterval في /etc/ssh/sshd_config من جهاز الخادم. حاول تقليل الفاصل الزمني إذا كنت لا تزال تحصل على الخطأ.

يمكن تعيين التكوين لمستخدم واحد في الملف ~/.ssh/config سواء على الخادم وعميل العميل. تأكد من أن الملف يحتوي على أذونات صحيحة chmod 644 ~/.ssh/config.


211
2018-05-26 11:49



نعم أقوم بعمل مشابه ويعمل بشكل جيد لمعظم الأشياء. - Oli♦
أنا لست على جهاز Mac ، ولكن يبدو أن Ubuntu 12.04 والملف الخاص بنظام التشغيل هذا هو ~ / .ssh / config. - H2ONaCl
يعطي OS X 10.8.4 خطأ Bad configuration option: ClientAliveInterval - ohho
أنا أحصل على نفس الشئ Bad configuration option خطأ على OSX 10.8.4. - Nick Heiner
بشكل عام ، يمكنك وضع هاتين الأمرين في أجزاء مختلفة من النظام. فقط ServerAliveInterval على جانب العميل OSX ... وفقط ClientAliveInterval على ملف التكوين sshd ... - ftrotter


قد تنهار جلسات SSH لأسباب عديدة وربما لا يمكن تجنبها.

يتم استدعاء الأداة المساعدة المفيدة التي يمكن استخدامها للتخفيف من المشاكل الناجمة عن هذا screen. الشاشة هي أداة قوية تسمح لك بالتحكم في العديد من المحطات التي ستبقى على قيد الحياة بشكل مستقل عن جلسة ssh. على سبيل المثال ، إذا قمت بتشغيل screen في جلسة ssh سترى محطة جديدة مفتوحة ويمكنك استخدام ذلك لتشغيل المهام. لنفترض أن جلسة ssh الخاصة بك تموت في هذه العملية. جري screen -d ثم screen -r ستعيد الجلسة الأخيرة وستتمكن من المتابعة من هناك. تأكد من قراءة بعض الوثائق قبل استخدامه.


70
2017-10-04 16:28



ربما هذا هو أفضل إجابة ، لست متأكدًا لماذا لم يتم التصويت عليها أعلى. "الإصلاحات" الأخرى مفيدة في الحالة الخاصة التي تهتم فيها حقاً بالحفاظ على اتصال SSH ، ولكن في معظم حالات الاستخدام أتخيل أن القلق الحقيقي هو استمرار العمليات المقصودة ، بغض النظر عن مشكلات اتصال العميل / الخادم أياً كانت . - Paul McMurdie
وأود أيضا أن تضيف Tmux كبديل للشاشة. أجده أكثر تنوعا واستقرارا من الشاشة. - fridaymeetssunday
فقط ترك هذا هنا للرجوع إليها مستقبلاً - يمكنك تشغيله بسهولة screen -d -r لاستعادة الجلسة الأخيرة. - doplumi
أو ببساطة screen -dr. أو screen -x اعتمادا على ما تخطط للقيام به. النقطة هي ، يجب على المرء أن يعرف ما تفعله كل هذه المفاتيح ، بحيث يمكن للمرء استخدام تلك المناسبة وليس فقط متابعة اقتراحات الناس الإنترنت بشكل أعمى. هناك ملخص مدمج لطيف متاح هنا: ss64.com/bash/screen.html - flith


تكوين العميل

حاول إنشاء الملف:

~/.ssh/config

أضف المحتويات:

Host *
  ServerAliveInterval 30
  ServerAliveCountMax 5

الآن ssh إلى الخادم الخاص بك ومعرفة ما إذا تم إصلاح مشكلتك. خيار ClientAliveInterval مفيد فقط عند تكوين خادم ssh (ويعرف أيضا باسم sshd) ، فإنه لا يغير أي شيء على جانب ssh client ، لذلك لا تستخدمه في ملف التكوين أعلاه.

سيؤدي هذا إلى إرسال إشارة hello-are-you-there إلى الخادم في حالة عدم استلام أية حزم في الثواني الثلاثين السابقة (كما هو موضح أعلاه). ومع ذلك ، إذا كان عدد إشارات hello-are-you-there المتتالية يصل إلى ServerAliveCountMax ، فسيتم فصل ssh عن الخادم. هذه القيمة تتعطل إلى 3 (بحيث 3 * 30 = 90 ثانية بدون نشاط الخادم) ، وزيادتها إذا كانت تناسب احتياجاتك. هناك الكثير من خيارات التهيئة إلى ملف .ssh / config ويمكنك قراءة:

باستخدام ملف تهيئة SSH

لمزيد من المعلومات عن الخيارات الأخرى. قد لا ترغب في تطبيق هذا على كل خادم تقوم بالاتصال به والذي سيعرضه هذا المثال. أو كبحها لخادم معين فقط عن طريق استبدال الخط Host * مع Host <IP> (استبدل بعنوان IP ، انظر صفحة man ssh_config).

تكوين الخادم

وبالمثل ، يمكنك أن تخبر الخادم أن يكون لطيفًا مع عملائك. ملف التكوين هو /etc/ssh/sshd_config.

ClientAliveInterval 20
ClientAliveCountMax 5

يمكنك إما إلغاء تنشيطه عن طريق الإعداد ClientAliveInterval إلى 0 أو قرص ClientAliveInterval و ClientAliveCountMax لتعيين الحد الأقصى لخمول ssh العميل دون الرد على المسابير. إحدى مزايا هذه الإعدادات عبر TCPKeepAlive هي أن الإشارات يتم إرسالها عبر القنوات المشفرة ، لذا فمن المحتمل أن تكون غير مرئية.


40
2017-10-06 02:54



لا يعمل. أواجه نفس الخطأ مرة أخرى. - user997704
جربه مباشرة من سطر الأوامر وانتقل إلى أقل: ssh -o ServerAliveInterval = 5 user @ host - Matt
حاول ذلك أيضا ... لا يعمل. أنا حقا لا أعرف ما يجري مع نظام بلدي - user997704
انها ClientAliveCountMax ، وليس ClientAliveMaxCount - David G
DavidG يرجى تحرير الإجابة مع التصحيحات الخاصة بك. - CivMeierFan


أنا عن بعد ترقية خادم أوبونتو من صريح إلى دقيق وفقدت اتصال ssh في منتصف الترقية مع رسالة "كتابة فشل. أنبوب بروكين". ClientAliveInterval و ServerAliveInterval لم يفعل شيئا. الحل هو تشغيل خيارات TCPKeepAlive في ssh العميل:

TCPKeepAlive yes

في

/etc/ssh/ssh_config

22
2017-10-07 18:40





للعميل ، تحرير الخاص بك ~/.ssh/config (أو /etc/ssh/ssh_config) الملف على النحو التالي:

Host *
  TCPKeepAlive yes
  ServerAliveInterval 120

TCPKeepAlive - يحدد ما إذا كان النظام يجب أن يرسل برنامج التحكم في اتصال TCP   رسائل إلى الجانب الآخر. إذا تم إرسالها ، وفاة الاتصال   أو تحطم واحدة من الآلات سيتم ملاحظتها بشكل صحيح. ومع ذلك،   هذا يعني أن الاتصالات ستموت إذا كان الطريق معطلاً مؤقتًا ،   وبعض الناس يجدونها مزعجة (الافتراضي هو "نعم").

ServerAliveInterval - يحدد فترة المهلة في ثوان بعد ذلك   إذا لم يتم استلام أي بيانات من الخادم ، فسوف يرسل ssh (1)   رسالة من خلال القناة المشفرة لطلب الرد من   الخادم. الافتراضي هو 0 ، مشيرا إلى أن هذه الرسائل لن تكون   إرسالها إلى الخادم.


بالنسبة للملقم ، قم بتحرير /etc/ssh/sshd_config مثل:

ClientAliveInterval 600
ClientAliveCountMax 0

إذا كنت تريد أن يخرج عميل ssh (timeout) تلقائيًا بعد 10 دقائق (600 ثانية).

ClientAliveCountMax - يشير هذا إلى العدد الإجمالي للتحقق   رسالة مرسلة من خادم اس اس دون الحصول على اي رد من   عميل ssh. الافتراضي هو 3.

ClientAliveInterval - يشير هذا إلى المهلة في ثوانٍ. بعد س   عدد الثواني ، سيرسل خادم ssh رسالة إلى العميل يسأل   للاستجابة. Deafult هو 0 (لن يرسل الخادم رسالة إلى العميل   التحقق من.).


أنظر أيضا: ماذا الخيارات ServerAliveInterval و ClientAliveInterval في sshd_config تفعل ، على وجه التحديد؟


18
2017-10-02 13:52





أنا على الاطلاق أحب موش. أنا كثيرا ما ssh في الخادم ، أغلق جهاز الكمبيوتر المحمول والذهاب إلى مقهى ، وفتحه ويستمر كما لو لم يتغير شيء.

موش (قذيفة متحركة)

تطبيق المحطة عن بعد الذي يسمح التجوالويدعم على فترات متقطعة   الاتصال، ويوفر ذكاء محلي   صدى صوت وتحرير خط ضغطات المستخدم.

موش هو بديل ل SSH. إنها أكثر قوة واستجابة ،   خاصة عبر شبكة Wi-Fi والوصلات الخلوية والمسافات البعيدة.

Mosh هو برنامج مجاني ، متوفر لـ GNU / Linux و FreeBSD و Solaris و Mac OS X و Android.


16
2017-09-30 18:48





بالنسبة لي ، كنت أتلقى Write failed: Broken pipe حتى عندما كنت أكتب بنشاط في vim أو في موجه shell. لم أستطع تصفح الإنترنت محليا سواء لفترة. (كنت أتصل عن بعد باستخدام Ubuntu Terminal.)

يقوم آخرون في شبكتي بتدفق الكثير من الفيديو من Netflix وأماكن أخرى. لا أستطيع إثبات ذلك ، ولكن أظن أنه مشكلة في ISP أو جهاز التوجيه. على سبيل المثال ، يشير كلٌّ من Verizon و Netflix إلى بعضهما البعض بسبب مشكلات شبكة العملاء.

إذا كان لديك اتصال الطلب الهاتفي وتدفق الفيديو أو الموسيقى مع SSH أو اتصال التلنت في وقت واحد ، فإنه أمر لا مفر منه في مرحلة ما سوف تحصل على رسالة أنبوب مكسورة. يبدو أن ترقية حزمة خدمة الإنترنت الخاصة بـ ISPs تجعل توصيلي المكسور أقل تكرارًا.


4
2017-07-30 13:33