মধ্যে
ssh host tail -f file
ssh
ক্লায়েন্টের সাথে সংযোগ করে sshd
উপর সার্ভার host
একটি TCP সংযোগের মাধ্যমে। এটি একটি স্ট্রাউট একটি পাইপে পুনঃনির্দেশিত সঙ্গে sshd
চালিত tail -f
। sshd
পাইপের অপর প্রান্ত থেকে কী আসছে তা ssh
ক্লায়েন্টকে প্রেরণের জন্য এটি এসএসডিডি প্রোটোকলে অন্তর্ভুক্ত করে । (সঙ্গে rshd
, tail
stdout- এ সকেট সরাসরি হত, কিন্তু 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