এসএসএইচ সেশনে Ctrl-C পরিচালনা করছে


20

যখন আমি একটি এসএসএইচ অধিবেশন শুরু করি যা দীর্ঘকাল ধরে চলমান কমান্ড কার্যকর করে, তখন Ctrl+ C(সিগিন্ট) হ্যান্ডলিংয়ের সাথে কী ঘটে ?

আমি দেখতে পাচ্ছি যে এসএসএইচ অধিবেশন বন্ধ, তবে আমি নিশ্চিত নই যে প্রথমে স্বাক্ষরটি কী পায়: এটি কি ...

  1. দূরবর্তী কমান্ড কমান্ড? এটি হ'ল, (ক) রিমোট কমান্ডের সিগন্যাল হ্যান্ডলারটি বলা হয় এবং রিমোট কমান্ডটি থামায়, (খ) যে শেলটি এটি আবিষ্কার করেছিল তা সনাক্ত করে যে কমান্ডটি বন্ধ হয়েছে, এবং পাশাপাশি থামবে (গ) রিমোট এসএসডি শেলটি থামিয়ে সনাক্ত করে, সুতরাং এটি সংযোগটি বন্ধ করে দেয়

    অথবা

  2. স্থানীয় ssh সংকেত গ্রহণ করে এবং সংযোগটি বন্ধ করে দেয়।

আমি মনে করি যে (1) ঘটছে, তবে তা নিশ্চিত করতে চাই।

এক্ষেত্রে SIGINT গুলির শেল হ্যান্ডলিংয়ের মাধ্যমে কী ঘটে যায় সে সম্পর্কে আমিও অনিশ্চিত। উদাহরণস্বরূপ, যদি আমি ...

ssh remote 'while true ; do sleep 1 ; date ; done'

এবং Ctrl+ C, তারপরে রিমোট সংযোগটি ফেলে দেওয়া হবে। শেলের নীচে রিমোট কমান্ড চালানোর কোনও উপায় আছে যা Ctrl+ এর পরেও বেঁচে থাকবে C? এটি, এই ক্ষেত্রে, লুপটি থামান এবং আমাকে দূরবর্তী শেলটিতে কাজ চালিয়ে যাওয়ার অনুমতি দিন?


3
একটি নন-ইন্টারেক্টিভ SSH ( ssh remote command, যেমন উল্টোদিকে ssh remote) টাইপিং Ctrl-C দ্বারা উত্পন্ন SIGINT দ্বারা (স্থানীয় দিকে) মরে যাবে। বন্ধ সকেটটি পড়তে বা লেখার চেষ্টা না করা পর্যন্ত দূরবর্তী দিকটি সম্ভবত (ওএসের উপর নির্ভরশীল) চলতে থাকবে। আপনি যদি সিটিটিএল-সি সহ আপনার সমস্ত কী-স্ট্রোকগুলি রিমোটে যেতে চান তবে ব্যবহার করুন ssh remote
মার্ক প্লটনিক

@ মার্কপ্লটনিক: ঠিক আছে মার্ক - আপনি যদি উত্তর হিসাবে নীচে আপনার প্রতিক্রিয়া যোগ করেন তবে আমি তা গ্রহণ করব ... আমার নিজের পরীক্ষায়, আমি যাচাই করেছি যে রিমোট কোনও সংকেত পায় না।
ttsiodras

উত্তর:


23

sshটার্মিনাল-সূচিত সংকেতগুলির মতো কিছুটা পৃথক চিকিত্সার ফলে কয়েকটি ভিন্ন উপায়ে আহ্বান করা যেতে পারে Ctrl-C

  • ssh remotehostএকটি ইন্টারেক্টিভ সেশন চালু হবে remotehost। ক্লায়েন্টের পক্ষ থেকে, sshস্ট্ডিন দ্বারা ব্যবহৃত টিটিটি "কাঁচা" মোডে সেট করার চেষ্টা করবে এবং sshdরিমোট হোস্টে সিউডো-টিটি বরাদ্দ করা হবে এবং আপনার শেলটি লগইন শেল হিসাবে চালিত করবে (উদাঃ -bash)।

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

  • ssh -t remotehost command args ...remotehostউপরের মত দূরবর্তী দিক বাদে একটি ইন্টারেক্টিভ সেশন your_shell -c "command args ..."চালানো হবে। উপরের মতো, আপনি টাইপ Ctrl-Cকরলে এটি দূরবর্তী হোস্টে প্রেরণ করা হবে, যেখানে কমান্ডটি সম্ভবত SIGINT গ্রহণ করবে এবং সঙ্গে সঙ্গে প্রস্থান করবে এবং তারপরে দূরবর্তী শেলটি প্রস্থান করবে। রিমোট sshdতারপরে সংযোগটি বন্ধ করে দেয় এবং sshপ্রতিবেদন করেConnection to remotehost closed.

  • ssh remotehost command args ...এ কোনো অ-ইন্টারেক্টিভ অধিবেশন চালানো হবে remotehost। ক্লায়েন্টের পক্ষ থেকে, টিটিটি কাঁচা মোডে সেট করা sshহবে না (ভাল, কোনও পাসওয়ার্ড বা পাসফ্রেজে পড়া ছাড়া)। আপনি যদি টাইপ করেন Ctrl-C, sshপাঠানো হবে SIGINT এবং অবিলম্বে বন্ধ করা হবে, এমনকি কোনও Connection to remotehost closedবার্তা জারি না করেই ।

    your_shell -c "command args ..."প্রসেস করবে সম্ভবত দূরবর্তী হোস্ট চলমান থাকা । হয় তারা নিজেরাই প্রস্থান করবে, বা একটি প্রক্রিয়া এখন-বন্ধ হওয়া এসএসকে সকেটে ডেটা লেখার চেষ্টা করবে, যার ফলে এটিতে একটি (সাধারণত) মারাত্মক এসআইপিআইপি সিগন্যাল প্রেরণ করা হবে।


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

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