আমি কীভাবে একটি ভাঙ্গা পাইপের পরে ssh সেশনে পুনরায় সংযোগ করতে পারি?


28

সুতরাং আমি apt-get upgradeযখন একটি সার্ভারে চলছিলাম যখন রাউটারটি সিদ্ধান্ত নিয়েছে যে এটি অনেক দীর্ঘ হয়ে গেছে কারণ এটি সর্বশেষে আমাকে রাগ করেছিল: এটি সমস্ত সংযোগ বাদ দিয়েছে dropped গল্পের নৈতিকতা screenআপনি যখন বাম রাউটারে আছেন তখন প্রচুর ব্যবহার করা।

যাইহোক, আমি আবার লগ ইন করেছি এবং এইচটিপটিতে দেখতে পেলাম যে প্রক্রিয়াটি এখনও সেখানে স্থির ছিল, এখনও আমার ওয়াই / এন আপগ্রেড হওয়ার অপেক্ষায় ছিলাম (ভাগ্যক্রমে এটি এখনও আঘাত করে নি)। ভেঙে যাওয়া কোনও অধিবেশনে আমি আবার যোগ দিতে পারি কি এমন উপায় আছে? প্যাকেজ পরিচালনার মাঝামাঝি ছিল না বলেই আমি এটি শেষ করেছিলাম তবে ভবিষ্যতের রেফারেন্সের জন্য এটি জেনে রাখা ভাল।


1
আমি অবাক হয়েছি apt-getপ্রক্রিয়াটি এখনও চলছে। এটি এসএসএইচ পর্যন্ত পুরো প্রক্রিয়া শৃঙ্খলার সাথে মারা গিয়েছিল। আমি লক্ষ্য করেছি যে do-dist-upgradeস্বয়ংক্রিয়ভাবে একটি screen/ byobuঅধিবেশন শুরু হয় : সম্ভবত কিছু পরিস্থিতিতে, apt-getএকই কি?
nfirvine

উত্তর:


16

আপনার যথাযথ প্রশ্নের উত্তর: আপনি পারবেন না । আমি মনে করি মূল সমস্যাটি হ'ল প্রমাণীকরণের পদ্ধতিগুলি সিঙ্কের বাইরে চলে যাবে। এটা ঠিক কাজ করে না।

যেমন আপনি নিজেরাই লক্ষ্য করেছেন, সমাধানটি হ'ল সম্ভব হলে পর্দা ব্যবহার করা (উপায় দ্বারা, tmux পর্দার বিকল্প)।


1
তবে আপনার পাসওয়ার্ডহীন এসএসএস থাকলে কী হবে? আপনি কি এটা করতে পারেন?
শ্রীধর সারনোবাত 3'13

1
byobuscreen(বা tmux) - এর শেষ
প্রান্তটি

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

9

দীর্ঘস্থায়ী প্রক্রিয়াগুলি চালানোর জন্য, আপনি যদি আরও বন্ধুত্বপূর্ণ ইন্টারফেস চান তবে আমি স্ক্রিন বা বাইবু ব্যবহার করি ।

পর্দার জন্য, আপনি ব্যবহার করতে পারেন:

screen [program] [args]

এটি [প্রোগ্রাম] এবং এর [আরগস] এ চলবে a স্ক্রিন সেশনের মধ্যে । প্রোগ্রামটি শেষ হয়ে গেলে, সেশনটি স্বয়ংক্রিয়ভাবে বন্ধ হয়ে যায়। আপনি যদি আপনার প্রোগ্রামটি চলার পরে সেশনটি রাখতে চান, তবে কোনও আর্গুমেন্ট ছাড়াই পর্দা চালান এবং সেশনের অভ্যন্তরে একটি নতুন প্রম্পট উপস্থিত হবে। CTRL + A + D বর্তমান অধিবেশন থেকে টার্মিনালটি পৃথক করে।

পূর্ববর্তী সেশনে পুনরায় সংযুক্ত করতে:

screen -r

যদি কেবল একটি অধিবেশন খোলা থাকে তবে তা অবিলম্বে পুনরায় সংযুক্ত হবে। যদি একাধিক সেশন চলমান থাকে তবে এটি আপনাকে জিজ্ঞাসা করবে আপনি কোনটি সংযুক্ত করতে চান। আপনি যদি সেশনটির নামটি জানেন, আপনি এটি কেবল এই কমান্ড লাইনের একটি যুক্তি হিসাবে যুক্ত করতে পারেন।

Byobu, একটি দুর্দান্ত উন্নতি। এটি স্ক্রিন ভিত্তিক , তবে নীচে একটি বার সরবরাহ করে যা বর্তমানের সমস্ত সেশনগুলিকে ট্যাব হিসাবে দেখায় এবং এগুলির চারপাশে সরানোর জন্য সহজ শর্টকাট দেয়। আপনি পারেন:

  • এফ 2 একটি নতুন অধিবেশন শুরু করুন
  • বামদিকে পরবর্তী সেশন ট্যাবে এফ 3 সরান
  • ডানদিকে পরবর্তী সেশন ট্যাবে এফ 4 সরান
  • F8 বর্তমান সেশন ট্যাবে বন্ধুত্বপূর্ণ নাম দেয়
  • F9 একটি অপশন মেনু খোলে
  • সিটিআরএল + এ + ডি টার্মিনাল থেকে সমস্ত সেশন আলাদা করে।

পরামর্শের শব্দ : ব্যবহারকারীর মূলের সাহায্যে একটি সেশন খোলা এড়ানো উচিত । যদি কেউ আপনার টার্মিনালে অ্যাক্সেস অর্জন করে (স্থানীয়ভাবে বা দূরবর্তীভাবে), তারা চলমান সেশনে সহজেই সংযুক্ত হতে পারে এবং আপনার সিস্টেমটিকে মূল হিসাবে ব্যবহার করতে পারে। প্রয়োজনে সাধারণ ব্যবহারকারী এবং sudo indivudual কমান্ড লাইনগুলি প্রয়োজনীয় হিসাবে সেশন শুরু করা ভাল ।


1
আমি ওপিকে উদ্ধৃতি দিতে পারি: "গল্পের নৈতিকতা হল পর্দা প্রচুর ব্যবহার করা "। স্পষ্টতই এখানে প্রশ্ন ছিল না।
জানুয়ারী

লেখার জন্য ধন্যবাদ তবে জানুয়ারীটি সঠিক ছিল।

রুট হিসাবে একটি স্ক্রীন সেটআপ করতে sudo স্ক্রিন <কম্যান্ড> ব্যবহার করুন, যার সাথে পুনরায় সংযোগ করতে sudo অ্যাক্সেস প্রয়োজন। সাধারণত কোনও পর্দা শুরু করার চেয়ে তার চেয়ে ভাল এটির পরে এটির রুটে পরিবর্তন।
djsmiley2k - CoW

8

আপনি যখন কোনও ভাঙা এসএসএইচ অধিবেশনটিতে পুনরায় যুক্ত করতে পারবেন না, আপনি এসএসএইচ -এর অভ্যন্তরে চলমান প্রক্রিয়াটি পুনর্বার করতে পারবেন - যা আপনি চান তার সাথে কার্যত সমতুল্য।

নির্দেশনা

আপনার ক্ষেত্রে, আপনি apt-getকোনও নতুন এসএসএইচ অধিবেশন, screenঅধিবেশন বা এ জাতীয় পছন্দ থেকে নিয়ন্ত্রণ করার প্রক্রিয়াটি গ্রহণ করবেন । এর জন্য আমার প্রিয় হ'ল reptyrআদেশ:

$ sudo apt-get install reptyr
$ ps ax | grep apt-get
10626 pts/8   R+     0:32 apt-get upgrade

তারপরে, আপনার প্রক্রিয়াটির জন্য আপনি খুঁজে পেয়েছেন:

$ sudo reptyr -T 10626

বা যদি এটি কাজ না করে, চেষ্টা করুন:

$ reptyr 10626

এই পর্যায়ে যাওয়ার পরে, আপনার সমস্ত কীবোর্ড ইনপুট আপনি যে প্রোগ্রামটি গ্রহণ করেছিলেন তাতে যায় to দুর্ভাগ্যক্রমে আপনি এসএসএইচ সেশনের পুরানো আউটপুট দেখতে পাবেন না theapt-get আউটপুট আপনাকে নিশ্চিতকরণের জন্য জিজ্ঞাসা করে।

ব্যাখ্যা

অন্যান্য একাধিক সরঞ্জাম রয়েছে যা মূলত একইভাবে কাজ করে reptyr(এটি ptraceডিবাগ সংযুক্তির মাধ্যমে )। নিম্নলিখিত প্রশ্নোত্তরগুলি দেখুন যেখানে সেগুলি আলোচনা করা হয়েছে:

উপরোক্ত নির্দেশাবলী সালে reptyr 10626ব্যবহারসমূহ ptraceডিবাগ সংযুক্তি যখন sudo reptyr -T 10626কমান্ড চুরি পির TTY ব্যবহার করে এবং বাঞ্ছনীয় (হয় বিস্তারিত )।

অবশেষে, কারণ তোমাদের উপর অধিকারী SSH সেশান এই উপায় কারণ একটি নিতে পারবেন না sshdপ্রক্রিয়া একটি হোস্ট টার্মিনাল দ্বারা নিয়ন্ত্রিত হয় না, এর পরিবর্তে এটি প্রদান করে একটি - একটি টার্মিনাল বান্দা অংশ ptsডিভাইস - যখন মাস্টার অংশ নিয়ন্ত্রণ এটিতে থাকা ক্লায়েন্ট মেশিন, এখানে একটি ভাঙ্গা ডাউন এসএসএইচ সেশন সহ with আপনি যখন এ জাতীয় sshdপ্রক্রিয়াটি জোর করে গ্রহণ করেন reptyr -s <pid>, তখন আপনার কীবোর্ড ইনপুটটি সক্রিয় শিশু প্রক্রিয়া নয়, সেই প্রক্রিয়াতে চলে যায়। সুতরাং একটি "সিটিআরএল + জেড" কেবল এটিকে বন্ধ করে দেবে sshd


1

আমি do-dist-upgradeল্যাপটপ থেকে এসএসএসের মাধ্যমে যা করছিলাম যা স্থগিত হয়ে গেল Broken pipe। মেশিনে ফিরে যাওয়ার পরে আমি দেখতে পেলাম আপগ্রেড-সম্পর্কিত প্রক্রিয়াগুলি এখনও চলছে, যার মধ্যে whiptailআমাকে ইনপুট (যা ডিসপ্লে ম্যানেজার চয়ন করতে চান) এবং প্রাসঙ্গিকভাবে মূলের মালিকানাধীন SCREEN। আমি করতে পেরেছি sudo su -এবংscreen -r অধিবেশনটি সংযুক্ত করতে এবং দেখুন, আমার সামনে হুইপটেল ডায়ালগটি আমার কাছে ইনপুট নিতে সক্ষম হয়েছে। আমি নির্বিঘ্নে আপগ্রেডটি আবার শুরু করতে সক্ষম হয়েছি।

দ্রষ্টব্য: এটি উবুন্টু 14.04 থেকে 16.04 এ আপগ্রেড ছিল।

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