কীভাবে এসএসএইচ সংযোগে "লিখিত ব্যর্থ: ভাঙা পাইপ" রোধ করবেন?


283

Write Failed: broken pipeত্রুটি রোধ করতে ক্লায়েন্ট এবং সার্ভার উভয় ক্ষেত্রে এসএসএইচ কনফিগার করতে আমি কী করতে পারি ? এটি প্রায়শই ঘটে যদি আপনি নিজের ক্লায়েন্ট কম্পিউটারটি ঘুমেন এবং পরে আবার চালু করেন।


8
সত্যি কিছু না. অধিবেশন বাধাগ্রস্ত হয়েছিল, এবং অধিবেশনটির সুরক্ষা আপস করা হয়েছিল। আপনি যদি ঘুমের জন্য কমপটি না রাখেন তবে আপনি ক্লায়েন্টের জন্য সার্ভারে বেঁচে থাকা হার্ট বিট মারার জন্য একটি বেঁচে থাকার সময় নির্ধারণ করতে পারেন, তবে যদি সিস্টেমটি ঘুমিয়ে যায় তবে কিছুই করা যায় না।
ডারড্রাগন

3
এই ক্ষেত্রে আমি এমন কিছু সন্ধান করছি যা আমাকে একটি ভাঙ্গা এসএসএস সংযোগটি পুনরায় আরম্ভ করার অনুমতি দেয় (সম্ভবত প্রস্থানের কোডের উপর ভিত্তি করে) এবং ব্যবহারটি পুনরুদ্ধার করতে পারে screen?
sorin

4
আপনার লোকেরা ভুল: আমার কাছে TWO ডেস্কটপ ক্লায়েন্ট মেশিনগুলি সেম সার্ভারের সাথে সংযুক্ত রয়েছে। একটি হলেন উবুন্টু ১২.১০, কোয়ান্টাল, যার এসএসএইচ ক্লায়েন্ট ভাল কাজ করে এবং কয়েক ঘন্টা সংযোগ রাখে। অন্যটি হলেন উবুন্টু ১৪.১০, ইউটোপিক, একে অপরকে সরিয়ে রাখুন এবং একটি নতুন ইনস্টল করুন; কয়েক মিনিট পরে, এটি এই বার্তাটি দিয়ে নিজেকে ব্লক করে। মেশিনে নেটওয়ার্কের বাকি কাজগুলি বাধাগ্রস্ত হয় না। সুতরাং না, এটি কোনও নেটওয়ার্ক সমস্যা বা সার্ভার সমস্যা নয়, তবে একটি নির্দিষ্ট এসএসএইচ ক্লায়েন্ট সফটওয়্যার সমস্যা যা "ডারড্রাগান" বলতে সাহসী হওয়ার বিপরীতে সমাধান করা যেতে পারে, "কিছু করা যায় না"।
ডেভিড এল

2
এবং প্রকৃতপক্ষে, যেমনটি আমি বলেছি: @ ডার্কড্রাগন যেমন সাহস করেছিলেন ঠিক তেমন লোকেরা যখন "কিছুই করা যায় না" বলে তখন খুব বেশি কথা বলে। আমি আরম কোচার্যের উত্তর পড়েছি এবং আমি এটি প্রয়োগ করেছি: 20 মিনিট আগে ... আমি বুঝতে পেরেছিলাম যে আমার পুরানো কোয়ান্টাল উবুন্টু 12.10 সালে, আমি সেই ফাইলটি সেই নির্দেশটি প্রয়োগ করেছি [আমি কেবল যাচাই করেছি], দু'বছর আগে, এবং তা ছিল সেখানে স্থিতিশীলতার কারণ। আমি এখানে এটি করেছি এবং এই শেষ 20 মিনিটের মধ্যে সংযোগটি তখন থেকেই স্থিতিশীল ছিল। সুতরাং দয়া করে লোকেরা: "কিছুই করা যায় না" এমন ভেবে সাহস করার পরে নিজেকে বিরত রাখুন এবং এই বার্তাটি অন্য লোকের কাছে রেখে যাওয়ার চেষ্টা করার সময় আরও বিরত থাকুন।
ডেভিড এল

11
@ ডেভিডএল আপনার রেটিংয়ের আগে প্রশ্নগুলি আরও ভাল করে পড়া উচিত। আপনার সমস্যা ওপি'র মতো নয়, যিনি পরিষ্কারভাবে কম্পিউটারকে ঘুমের মধ্যে রাখার উল্লেখ করেছেন। যা কেবলমাত্র উত্তরগুলির একটির ঠিকানা ("মোশ"), এবং এটি প্রশ্নের পরে 2 বছর পরে পোস্ট করা হয়েছিল। তবে অন্যান্য উত্তরগুলি পরের সেরাটি করে, যা আপনার মতো আরও সহজে সমাধান করা যায় এমন ক্ষেত্রে সমাধানের প্রস্তাব দিচ্ছে। শীতল হয়ে উঠুন, এত চাপে থাকবেন না, ভাড়াসহ এখানে আশেপাশের কোনও ভালো কিছু হয় না ...
এমএসবি

উত্তর:


266

/etc/ssh/ssh_configলিনাক্স এবং ম্যাকের জন্য আমি এটি চেষ্টা করেছি :

Host *
ServerAliveInterval 120

এটি প্রায়শই, সেকেন্ডে, এটি সার্ভারে একটি রক্ষণশীল বার্তা প্রেরণ করা উচিত। যদি এটি কাজ না করে তবে আপনার কাজকর্মের সময় প্রতি দুই মিনিটে প্রবেশ করতে টিপতে কোনও বানরকে প্রশিক্ষণ দিন।

হয় আপনি স্থির করতে পারে ServerAliveIntervalমধ্যে /etc/ssh/ssh_configক্লায়েন্ট মেশিন বা ClientAliveIntervalমধ্যে /etc/ssh/sshd_configসার্ভার মেশিনের। যদি আপনি এখনও ত্রুটি পেয়ে থাকেন তবে বিরতি হ্রাস করার চেষ্টা করুন।

একক ব্যবহারকারীর জন্য কনফিগারেশন ~/.ssh/configসার্ভার এবং ক্লায়েন্ট উভয় পক্ষেই ফাইলে সেট করা যায় । ফাইলটির সঠিক অনুমতি আছে কিনা তা নিশ্চিত করুন chmod 644 ~/.ssh/config


4
আমি কোনও ম্যাকে নেই, তবে উবুন্টু 12.04 এবং এই অপারেটিং সিস্টেমের ফাইলটিও ~ / .ssh / config হিসাবে মনে হচ্ছে।
H2ONaCl

5
ওএস এক্স 10.8.4 একটি ত্রুটি দেয়Bad configuration option: ClientAliveInterval
ওহহ

3
আমি Bad configuration optionওএসএক্স 10.8.4 এ একই ত্রুটি পেয়েছি ।
নিক হেইনার

10
সাধারণত, আপনি এই দুটি কমান্ড সিস্টেমের বিভিন্ন অংশে রেখেছেন। ওএসএক্স ক্লায়েন্টের পক্ষে কেবল সার্ভারআলভইন্টারওয়াল ... এবং এসএসডিডি কনফিগারেশনের ফাইলটিতে কেবলমাত্র ক্লায়েন্টএলইভআইন্টারওয়াল ...
ftrotter

2
আমার বানর আমাকে বলেছিল: "কেন আপনি নিজেকে টাইপ করবেন না" শীর্ষে [ENTER] "
1515

85

অসংখ্য এবং সম্ভবত অনিবার্য কারণে এসএসএইচ সেশনগুলি ভেঙে যেতে পারে।

একটি দরকারী ইউটিলিটি যা এর ফলে সৃষ্ট সমস্যাগুলি হ্রাস করতে ব্যবহৃত হতে পারে তাকে ডাকা হয় screen। স্ক্রিন একটি শক্তিশালী ইউটিলিটি যা আপনাকে একাধিক টার্মিনাল নিয়ন্ত্রণ করতে দেয় যা ssh অধিবেশন থেকে স্বাধীনভাবে বেঁচে থাকবে। উদাহরণস্বরূপ, আপনি screenযদি কোনও ssh সেশনে চালান তবে আপনি একটি নতুন টার্মিনাল খোলা দেখতে পাবেন এবং আপনি এটি কাজ চালাতে ব্যবহার করতে পারেন। আপনার ssh অধিবেশনটি প্রক্রিয়াতে মারা যেতে দিন। screen -dতারপরে চালানো screen -rশেষ অধিবেশনটি আবার খুলবে এবং আপনি সেখান থেকে চালিয়ে যেতে সক্ষম হবেন। নিশ্চিত হয়ে নিন যে আপনি কিছু ডকুমেন্টেশন এটি ব্যবহার করার আগে পড়েছেন ।


5
এটি সম্ভবত সেরা উত্তর, কেন এটি উচ্চতর ভোট দেওয়া হয়নি তা আমি নিশ্চিত নই। অন্যান্য "ফিক্সগুলি" বিশেষ ক্ষেত্রে সহায়ক যেখানে আপনি আসলে এসএসএইচ সংযোগ বজায় রাখার বিষয়ে যত্নশীল হবেন, তবে বেশিরভাগ ব্যবহারের ক্ষেত্রে আমি কল্পনা করি আসল উদ্বেগটি হ'ল উদ্দেশ্যকৃত প্রক্রিয়াগুলি চলতে থাকে, কোনও ক্লায়েন্ট / সার্ভার সংযোগ ইস্যু নির্বিশেষে। ।
পল ম্যাকমুরডি

16
আমি স্ক্রিনের বিকল্প হিসাবে Tmux যুক্ত করব । আমি এটি পর্দার চেয়ে বহুমুখী এবং স্থিতিশীল মনে করি।
শুক্রবারমেটসুন্দে

2
ভবিষ্যতের রেফারেন্সের জন্য এটি এখানে রেখে দিচ্ছেন - আপনি screen -d -rআপনার শেষ সেশনটি পুনরুদ্ধার করতে সুবিধার্থে চালাতে পারেন।
ডপলমি

2
বা সহজভাবে screen -dr। বা screen -xআপনি যা করার পরিকল্পনা করছেন তার উপর নির্ভর করে। মুল বক্তব্যটি হ'ল, এই সমস্ত সুইচগুলি কী করে তা আপনার জানা উচিত, যাতে উপযুক্ত ব্যক্তিগুলি ব্যবহার করতে পারেন এবং কেবল অন্ধভাবে ইন্টারনেট লোকজনের পরামর্শ অনুসরণ না করে। এখানে একটি দুর্দান্ত কমপ্যাক্ট সংক্ষিপ্তসার পাওয়া যায়: ss64.com/bash/screen.html
ফ্লিট

এটি সমস্যার কোনও উত্তর নয়
ব্যবহারকারী 37288501

46

ক্লায়েন্ট কনফিগারেশন

ফাইলটি তৈরি করার চেষ্টা করুন:

~/.ssh/config

বিষয়বস্তু যুক্ত করুন:

Host *
  ServerAliveInterval 30
  ServerAliveCountMax 5

এখন আপনার সার্ভারে এসএসএস করুন এবং দেখুন আপনার সমস্যা স্থির হয়েছে কিনা। ক্লায়েন্টএলইভআইন্টারভাল বিকল্পটি কেবলমাত্র এসএসএস সার্ভার (ওরফে এসএসডি) কনফিগার করার সময় কার্যকর হয়, এটি এসএসএস ক্লায়েন্টের দিক থেকে কোনও জিনিস পরিবর্তন করে না, সুতরাং এটি উপরের কনফিগারেশন ফাইলটিতে ব্যবহার করবেন না।

পূর্ববর্তী 30 সেকেন্ডে কোনও প্যাকেট না পেয়ে (উপরে উল্লিখিত হিসাবে) এটি সার্ভারকে একটি হ্যালো-হু-ও-সিগনাল প্রেরণ করবে। তবে, যদি আপনি পর পরের সংখ্যার হ্যালো-হ'ল সিগন্যালগুলি সার্ভারআলাইভাউন্টম্যাক্সে পৌঁছে যায় তবে ssh সার্ভার থেকে সংযোগ বিচ্ছিন্ন হয়ে যাবে। এই মানটি 3 এ ডিফল্ট হয় (সুতরাং 3 * 30 = 90 সেকেন্ড সার্ভারের ক্রিয়াকলাপ ছাড়াই), এটি আপনার প্রয়োজন অনুসারে বাড়িয়ে তুলুন। .Ssh / config ফাইলটিতে আরও অনেক কনফিগার বিকল্প রয়েছে এবং আপনি পড়তে পারেন:

একটি এসএসএইচ কনফিগারেশন ফাইল ব্যবহার করা

অন্যান্য বিকল্প সম্পর্কে আরও তথ্যের জন্য। আপনি যে প্রতিটি সার্ভারের সাথে সংযোগ স্থাপন করেন যা এই উদাহরণটি ব্যবহার করবে আপনি এটি প্রয়োগ করতে চাইবেন না। অথবা কেবলমাত্র একটি নির্দিষ্ট সার্ভারের Host *সাথে লাইনটি Host <IP>প্রতিস্থাপন করে (কোনও আইপি ঠিকানা দ্বারা প্রতিস্থাপন করুন, ssh_config ম্যান পৃষ্ঠা দেখুন) rain

সার্ভার কনফিগারেশন

একইভাবে আপনি সার্ভারকে আপনার ক্লায়েন্টদের সাথে সৌম্য হতে বলতে পারেন। কনফিগারেশন ফাইল হয় /etc/ssh/sshd_config

ClientAliveInterval 20
ClientAliveCountMax 5

আপনি সেটিং দ্বারা এটি নিষ্ক্রিয় করতে পারেন ClientAliveIntervalকরতে 0বা খামচি ClientAliveIntervalএবং ClientAliveCountMaxপ্রোব সাড়া ছাড়া সর্বোচ্চ SSH ক্লায়েন্ট নিষ্ক্রিয়তা সেট করতে। টিসিপিকিপলাইভের মাধ্যমে এই সেটিংসগুলির একটি সুবিধা হ'ল সিগন্যালগুলি এনক্রিপ্ট করা চ্যানেলগুলির মাধ্যমে প্রেরণ করা হয়, সুতরাং এটি স্পোফেবল হওয়ার সম্ভাবনা কম।


এটি কাজ করে না। আমি আবার একই ত্রুটির মুখোমুখি হয়েছি।
ব্যবহারকারী 997704

3
কমান্ড লাইন থেকে সোজা চেষ্টা করে নিন এবং নীচে যান: ssh -o ServerAliveInterval = 5 ব্যবহারকারী @ হোস্ট
ম্যাট

সে চেষ্টাও করেছে .. কাজ করে না। আমি সত্যিই জানি না যে আমার সিস্টেমে কী চলছে
user997704

2
এটি ক্লায়েন্টএলাইভকাউন্টম্যাক্স, ক্লায়েন্টএলাইভম্যাকসাউন্ট নয়
ডেভিড জি

@ ডেভিডজি দয়া করে আপনার সংশোধন করে উত্তরটি সম্পাদনা করুন।
সিভিমিয়ারফ্যান

23

আমি দূরবর্তীভাবে একটি উবুন্টু সার্ভারকে লুসিড থেকে সুনির্দিষ্টভাবে আপগ্রেড করছি এবং "রাইটিং ব্যর্থ হয়েছে ock ব্রোকেন পাইপ" বার্তাটি দিয়ে আপগ্রেডের মাঝখানে ssh সংযোগটি হারিয়েছি। ক্লায়েন্টএলইভআইন্টারভাল এবং সার্ভারআলভআইন্টারভাল কিছুই করেনি। সমাধানটি হল ক্লায়েন্ট এসএস-তে টিসিপিকিপএলাইভ বিকল্পগুলি চালু করা:

TCPKeepAlive yes

মধ্যে

/etc/ssh/ssh_config

20

ক্লায়েন্টের জন্য, আপনার ~/.ssh/config(বা /etc/ssh/ssh_config) ফাইলটিকে নিম্নলিখিত হিসাবে সম্পাদনা করুন :

Host *
  TCPKeepAlive yes
  ServerAliveInterval 120

টিসিপিকিপএলাইভ - সুনির্দিষ্ট করে যে সিস্টেমটি অন্যদিকে টিসিপি রক্ষাকারী বার্তা প্রেরণ করবে কিনা। যদি তাদের প্রেরণ করা হয় তবে মেশিনগুলির একটির সংযোগের কারণে মারা যাওয়া বা ক্রাশটি সঠিকভাবে লক্ষ্য করা যাবে। তবে এর অর্থ হ'ল রুটটি অস্থায়ীভাবে বন্ধ হয়ে থাকলে সংযোগগুলি মারা যাবে এবং কিছু লোক এটি বিরক্তিকর বলে মনে করে (ডিফল্টটি হ'ল '')।

সার্ভারআলিভআইন্টারওয়াল - সেকেন্ডের মধ্যে একটি টাইমআউট ব্যবধান সেট করে যার পরে সার্ভার থেকে কোনও তথ্য না পাওয়া গেলে, ssh (1) এনক্রিপ্টড চ্যানেলের মাধ্যমে একটি বার্তা প্রেরণ করবে সার্ভারের কাছ থেকে প্রতিক্রিয়া অনুরোধ করার জন্য। ডিফল্ট 0 হয়, এটি বোঝায় যে এই বার্তাগুলি সার্ভারে প্রেরণ করা হবে না।


সার্ভারের জন্য, আপনার /etc/ssh/sshd_configহিসাবে সম্পাদনা করুন :

ClientAliveInterval 600
ClientAliveCountMax 0

আপনি যদি চান ssh ক্লায়েন্টটি 10 ​​মিনিট (600 সেকেন্ড) পরে স্বয়ংক্রিয়ভাবে প্রস্থান (টাইমআউট) প্রস্থান করতে পারে।

ক্লায়েন্টএলইভকাউন্টম্যাক্স - এটি এসএসএস ক্লায়েন্টের কাছ থেকে কোনও প্রতিক্রিয়া না পেয়ে এসএসএস সার্ভারের মাধ্যমে প্রেরিত চেকালাইভ বার্তার মোট সংখ্যা নির্দেশ করে। ডিফল্ট 3।

ক্লায়েন্টএলইভআইন্টারওয়াল - এটি সেকেন্ডের সময়সীমা নির্দেশ করে। সেকেন্ডের x সংখ্যা পরে, ssh সার্ভার ক্লায়েন্টকে প্রতিক্রিয়া চেয়ে একটি বার্তা প্রেরণ করবে। বধিরতা 0 হয় (সার্ভার ক্লায়েন্টকে চেক করতে বার্তা পাঠায় না।)


আরও দেখুন: বিকল্প কি কি করতে ServerAliveIntervalএবং ClientAliveIntervalsshd_config মধ্যে না, অবিকল?


ক্লায়েন্টের ডিফল্টের চেয়ে একটি সার্ভারআলাইভাউন্টম্যাক্স সেট করা ধীর সংযোগের জন্য সংযোগটি লাইভ রাখতে সহায়তা করে।
jonnyjandles

17

আমি মোশকে একদম পছন্দ করি। আমি প্রায়শই একটি সার্ভারে ছিটিয়ে আছি, আমার ল্যাপটপটি বন্ধ করে একটি ক্যাফেতে যাচ্ছি, এটি খুলুন এবং এমন কিছু চালিয়ে যাবেন যেন কিছুই পরিবর্তন হয়নি।

মোশ (মোবাইল শেল)

রিমোট টার্মিনাল অ্যাপ্লিকেশন যা রোমিংয়ের অনুমতি দেয় , বিরতিযুক্ত সংযোগ সমর্থন করে এবং বুদ্ধিমান স্থানীয় প্রতিধ্বনি এবং ব্যবহারকারী কীস্ট্রোকের লাইন সম্পাদনা সরবরাহ করে।

মোশ এসএসএইচের প্রতিস্থাপন। এটি আরও দৃust় এবং প্রতিক্রিয়াশীল, বিশেষত ওয়াই-ফাই, সেলুলার এবং দীর্ঘ-দূরত্বের লিঙ্কগুলির মাধ্যমে।

মোশ একটি নিখরচায় সফ্টওয়্যার, জিএনইউ / লিনাক্স, ফ্রিবিএসডি, সোলারিস, ম্যাক ওএস এক্স এবং অ্যান্ড্রয়েডের জন্য উপলভ্য।


6

আমার জন্য, আমি Write failed: Broken pipeসক্রিয়ভাবে ভিএম বা শেল প্রম্পটে টাইপ করার সময়ও পাচ্ছিলাম। আমি হয় স্থানীয়ভাবে স্থানীয়ভাবে ব্রাউজ করতে পারি না হয় কিছুক্ষণের জন্য। (আমি টার্মিনালটি ব্যবহার করে উবুন্টুর সাথে দূরবর্তীভাবে সংযোগ করছি))

আমার নেটওয়ার্কের অন্যরা নেটফ্লিক্স এবং অন্যান্য জায়গা থেকে প্রচুর ভিডিও প্রবাহিত করে। আমি এটি প্রমাণ করতে পারি না, তবে আমি এটির কোনও আইএসপি বা রাউটার সমস্যা সন্দেহ করি। উদাহরণস্বরূপ, ভেরিজন এবং নেটফ্লিক্স তাদের গ্রাহকের নেটওয়ার্ক সমস্যার জন্য একে অপরের দিকে আঙ্গুল দেখিয়ে দিচ্ছে।

যদি আপনি একটি ডায়াল-আপ সংযোগ পেয়ে থাকেন এবং একই সাথে এসএসএইচ বা টেলনেট সংযোগের সাথে ভিডিও বা সংগীত স্ট্রিম করছেন, তবে এটি কোনও সময়ে আপনাকে একটি ভাঙা পাইপ বার্তা পাবেন ev আমার আইএসপি ব্রডব্যান্ড প্যাকেজ আপগ্রেড করার ফলে আমার ভাঙ্গা সংযোগটি কম ঘন ঘন হয়ে উঠেছে।


3

আমার কাছে রিমোট সার্ভারে একটি স্ক্রিপ্ট রয়েছে যা এসএসএইচ কনফিগারেশন ক্লায়েন্ট বা সার্ভার নির্বিশেষে কখনই ব্যর্থ হয় না বলে মনে হয়।

#!/bin/bash
while true; do date; sleep 10; done;

এটিকে কিছু ডামি.শ ফাইলের মধ্যে সংরক্ষণ করুন এবং উইন্ডোটি ছোট করার আগে বা এখান থেকে সরে যাওয়ার আগে এটি দ্রুত চালান। এটি সার্ভারে বর্তমান সময়ের স্ট্যাম্প মুদ্রণ করতে থাকবে এবং আপনার সংযোগটি ততক্ষণ ধরে রাখবে যতক্ষণ অন্য কোনও কারণে সংযোগটি বাদ না দেওয়া হয়। আপনি যখন সেই টার্মিনালে ফিরে আসবেন, কেবল CTRL + C টিপুন এবং কাজ চালিয়ে যান।


9
বা কেবল topচলমান ছেড়ে দিন
এবেন গিয়ার


1

আপনি যখনই এসএসএসের আবেদন করবেন তখন আপনি এই আরোগুলি যুক্ত করতে পারেন: -o ServerAliveInterval=15 -o ServerAliveCountMax=3

আপনি যদি এটি করেন তবে আপনাকে / etc / ssh / * কনফিগারেশন ফাইলগুলি সম্পাদনা করতে হবে না।

এটি সহজ করার জন্য আপনি একটি বাশ ওরফে বা ফাংশন বা স্ক্রিপ্ট তৈরি করতে পারেন।

যেমন এই বাশ ফাংশনগুলি, আপনি আপনার .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>কীটালাইভগুলি সক্রিয় থাকবে।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.