মধ্যে
ssh host tail -f file
sshক্লায়েন্টের সাথে সংযোগ করে sshdউপর সার্ভার hostএকটি TCP সংযোগের মাধ্যমে। এটি একটি স্ট্রাউট একটি পাইপে পুনঃনির্দেশিত সঙ্গে sshdচালিত tail -f। sshdপাইপের অপর প্রান্ত থেকে কী আসছে তা sshক্লায়েন্টকে প্রেরণের জন্য এটি এসএসডিডি প্রোটোকলে অন্তর্ভুক্ত করে । (সঙ্গে rshd, tailstdout- এ সকেট সরাসরি হত, কিন্তু sshdএনক্রিপশন যোগ করা হয়েছে এবং একটি একক TCP সংযোগ উপর (পোর্ট / প্রতিনিধি / ব্যবহারে X11 / সুড়ঙ্গ ফেরৎ, দ্বারা stderr মত বিভিন্ন স্ট্রিম) মাল্টিপ্লেক্স তাই পাইপ অবলম্বন করা হয়েছে সক্ষম হয়)।
আপনি যখন CTRL-C টিপেন, sshক্লায়েন্টের কাছে একটি সাইন ইন প্রেরণ করা হয় । যার ফলে sshমৃত্যু হয়। মারা যাওয়ার পরে টিসিপি সংযোগ বন্ধ হয়ে যায়। আর তাই, উপর host, sshdপাশাপাশি ডাইস। tailনিহত হয় না, তবে এর স্টাডাউট এখন অন্য প্রান্তে পাঠকবিহীন একটি পাইপ। সুতরাং, পরের বার যখন এটি তার স্টাডআউটকে কিছু লিখবে, এটি একটি সাইনপাইপ পাবে এবং মারা যাবে।
ইন:
ssh -t host 'tail -f file'
এটি একই জিনিসটি ব্যতীত পাইপের সাথে থাকার পরিবর্তে, sshdএবং tailসিউডো-টার্মিনালের মাধ্যমে যোগাযোগ হয় । tailএর স্টাডাউট হ'ল একটি স্লেভ সিউডো-টার্মিনাল (যেমন /dev/pts/12) এবং যা কিছু tailলেখা আছে তা readমাস্টার সাইডে রয়েছে (সম্ভবত টিটি লাইনের শৃঙ্খলা দ্বারা সংশোধিত) দ্বারা sshdএবং sshক্লায়েন্টকে এনক্যাপসুলেটেড প্রেরণ করা হয়েছে ।
ক্লায়েন্ট পক্ষের সাথে -t, sshটার্মিনালটি rawমোডে রাখে । বিশেষত, এটি টার্মিনাল ক্যানোনিকাল মোড এবং টার্মিনাল সিগন্যাল হ্যান্ডলিং অক্ষম করে।
সুতরাং, যখন আপনি টিপে Ctrl+Cক্লায়েন্টের টার্মিনাল লাইন শৃঙ্খলা পরিবর্তে কাজের জন্য একটি সাইন ইন sshপ্রেরণ করেন, এটি কেবল ^Cসংযোগের জন্য অক্ষরটি প্রেরণ করে sshdএবং sshdসেটিকে ^Cদূরবর্তী টার্মিনালের প্রধান দিকে লিখে দেয় । এবং রিমোট টার্মিনালের লাইন শৃঙ্খলা এতে প্রেরণ SIGINTকরে tail। tailতারপরে মারা যায়, এবং sshdপ্রস্থানটি বন্ধ হয়ে যায় এবং সংযোগটি বন্ধ করে দেয় এবং ssh(যদি তা অন্যথায় পোর্ট ফরওয়ার্ডিং বা অন্য কোনও ক্ষেত্রে ব্যস্ত না হয়)।
এছাড়াও, সাথে -t, যদি sshক্লায়েন্ট মারা যায় (উদাহরণস্বরূপ আপনি প্রবেশ করেন ~.), সংযোগ বন্ধ হয়ে sshdযায় এবং মারা যায়। ফলস্বরূপ, একটি সাইনআপ পাঠানো হবে tail।
এখন, সাবধান যে ব্যবহারের -tপার্শ্ব প্রতিক্রিয়া রয়েছে। উদাহরণস্বরূপ, ডিফল্ট টার্মিনাল সেটিংসের সাথে \nঅক্ষর রূপান্তরিত হয় \r\nএবং রিমোট সিস্টেমের উপর নির্ভর করে আরও অনেকগুলি ঘটতে পারে, তাই আপনি stty -opostযদি দূরবর্তী হোস্টে একটি (আউটপুট পোস্ট-প্রক্রিয়াকরণ অক্ষম করতে) ইস্যু করতে চাইতে পারেন যদি আউটপুটটির উদ্দেশ্যে না হয় একটি টার্মিনাল:
$ ssh localhost 'echo x' | hd
00000000 78 0a |x.|
00000002
$ ssh -t localhost 'echo x' | hd
00000000 78 0d 0a |x..|
00000003
$ ssh -t localhost 'stty -opost; echo x' | hd
00000000 78 0a |x.|
00000002
-t/ ব্যবহারের আর একটি অপূর্ণতা -ttহ'ল ক্লায়েন্টের উপর স্টাডাউট এবং স্টার্ডার পৃথক নয়। দূরবর্তী কমান্ডের stdout এবং stderr উভয়ই sshক্লায়েন্টের stdout এ লেখা হবে :
$ ssh localhost ls /x | wc -l
ls: cannot access /x: No such file or directory
0
$ ssh -t localhost ls /x | wc -l
1