যখন এসএসএস ক্লায়েন্টের যুক্তি একটি ইন্টারেক্টিভ প্রোগ্রাম অনুসরণ করে তখন এসএসডি কেন একটি সিউডো টার্মিনাল ব্যবহার করে না?


11

সংযোগ স্থাপনের জন্য স্বাভাবিক ভাবেই একটি, SSH সার্ভার ssh username@ip_address। তবে কোনও ব্যবহারকারী কেবল রিমোট মেশিনে একটি প্রোগ্রাম চালাতে চাইতে পারেন। সুতরাং প্রোগ্রামের নামটি সাধারণ যুক্তির পরে অনুসরণ করে যা ssh username@ip_address <program_name>। উদাহরণস্বরূপ ssh username@ip_address ls,। ইন্টারেক্টিভ প্রোগ্রামগুলি বাদ দিয়ে এই যুক্তিটি ঠিক আছে (এটি ইউজার ইনপুট গ্রহণের পাশাপাশি আউটপুট সরবরাহ করার ক্ষেত্রেও যেমন) যেমন top। আউটপুট হয়

TERM এনভায়রনমেন্ট ভেরিয়েবল সেট করা নেই।

যার অর্থ sshd এবং শীর্ষ প্রোগ্রামগুলির মধ্যে কোনও (সিউডো) টার্মিনাল সংযুক্ত নেই। সমাধানটি হ'ল যুক্তি যুক্ত করা -tযেখানে পুরো কমান্ডটি এখন পরিণত হয় ssh -t username@ip_address top

আমার প্রশ্ন হ'ল ডিফল্টরূপে এসএসএসডি কেন অ ইন্টারেক্টিভ প্রোগ্রামগুলির সাথে যোগাযোগের জন্য সিউডো-টার্মিনাল ব্যবহার করতে পারে তাই -tইন্টারেক্টিভ প্রোগ্রামগুলির জন্য যুক্তি যুক্ত করার প্রয়োজন নেই ?


3
সংক্ষিপ্ত উত্তরটি "কারণ এটি সাধারণত আপনি চান তা নয়"।
সেলেদা

আমি পূর্বাভাস দিচ্ছি যে আপনার প্রশ্নটি মূলত কোনও মতামত ভিক্ষা / গ্রিপ তৈরির জন্য সংমিত হয়ে উঠবে। তবে আসুন এই প্রশ্নটি ঘুরিয়ে ফেলি: বিস্তৃত ক্ষেত্রে যখন প্রয়োজন হয় না তখন tshty সংস্থান কেন বরাদ্দ করা উচিত? বাস্তব প্রশ্নটি হল: জোর করে-টিটি বরাদ্দ কোনও কনফিগার বিকল্প নেই কেননা আপনি এটিকে ডিফল্ট বা হোস্ট-নির্দিষ্ট ডিফল্ট করতে পারেন?
ওথিয়াস

@Otheus এটা হয় কনফিগ বিকল্প। আপনি আপনার কনফিগারেশনে RequestTTY yes(বা force) সেট করতে পারেন ।
জাকুজে

সত্যিই। মনে হয় 6 এ প্রবর্তিত হয়েছে তবে খুব শীঘ্রই পর্যন্ত বাগিটি রয়েছে। আমি কেবল খুব পুরানো বিতরণ ব্যবহার করি। :)
ওথিয়াস

6
কীভাবে এসএসএইচ নির্ভরযোগ্যভাবে জানতে পারে যে কোনও প্রোগ্রাম ইন্টারেক্টিভ? এমনকি topব্যাচ মোডে চলতে পারে।
মুড়ু

উত্তর:


18

এটি সত্য যে, অন্যেরা যেমন বলেছে, পিটিওয়াইগুলির একটি নির্দিষ্ট ওভারহেড থাকে - তবে রিমোট কমান্ড চালানোর সময় পিটিওয়াই ব্যবহার না করার বড় কারণ হ'ল আপনি তথ্য হারাবেন।

সাধারণত, যখন আপনি ssh -র মাধ্যমে দূরবর্তী অবস্থান থেকে কমান্ড চালানোর জন্য, কমান্ড এর stdoutএবং stderrস্ট্রিম স্থানীয় পাঠানো হয় stdoutএবং stderr: যেমন -, / আলাদাভাবে নল তাদের অর্থ হলো, আপনি পুনর্নির্দেশ করতে পারেন

$ ssh server ls foo bar
ls: cannot access bar: No such file or directory
foo
$ ssh server ls foo bar > stdout 2> stderr
$ cat stdout
foo
$ cat stderr
ls: cannot access bar: No such file or directory

তবে আপনি যদি stdoutপিটিওয়াই ব্যবহার করেন তবে সমস্ত আউটপুট চলে যায় , কারণ পিটিওয়াইয়ের আউটপুট / ত্রুটির জন্য আলাদা স্ট্রিম থাকে না:

$ ssh -t server ls foo bar > stdout 2> stderr
$ cat stdout
ls: cannot access bar: No such file or directory
foo
$ cat stderr
$

এটি একটি ভাল বিষয় যা সম্পর্কে আমি অবগত ছিলাম না।
জাকুজে

1
@ থমাসডিকি: খুব সম্ভবত ... প্রশ্নটি এই নয় যে "বিকাশকারীদের এই ডিফল্টটি পছন্দ করার পিছনে theতিহাসিক কারণ কী", তবে "কেন ডিফল্টরূপে সিউডো-টার্মিনাল ব্যবহার করা যায় না " (জোর আমার, তবে শব্দ থেকে শব্দটি প্রশ্ন থেকে সরাসরি বা সরাসরি)। সুতরাং আচরণের পার্থক্য (যা স্ক্রিপ্টিং
আইডিয়ামগুলির বেশ কয়েকটি অংশকে

2
@ থমাসডিকি: আপনি এমনকি প্রশ্নটি পড়েছেন ? এটি কোথায় বিকাশকারীদের মতামত উল্লেখ করে?
স্মৃতি

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

7

এটি sshবর্ণনা করার জন্য ম্যানুয়াল পৃষ্ঠা :

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

এটি বৈশিষ্ট্যযুক্ত এবং সম্ভবত rshআচরণের historicalতিহাসিক কারণে হয়েছে caused এটা বেশ যুক্তিসঙ্গত। বেশিরভাগ কমান্ড সত্যই ইন্টারেক্টিভ হয় না এবং পিটিওয়াই বরাদ্দ করার জন্য এটি বিনামূল্যে অপারেশন নয় (যা 20 বছর আগে আরও গুরুত্বপূর্ণ ছিল)।


রিসোর্স ইস্যুগুলি প্রশংসনীয়, তবে সে সম্পর্কে মন্তব্যটি rshঅস্পষ্ট কারণ যে প্রোগ্রামটির কোনও উপযুক্ত বিকল্প নেই।
থমাস ডিকি

@ থমাসডিকি আমি কখনই ব্যবহার করি নি rsh, তবে অবশ্যই কিছুটা প্রভাব রয়েছে, বিকল্পগুলিতে নয়, আচরণের ক্ষেত্রে rshএবং rlogin(যদি কমান্ড থাকে বা না থাকে)। আপনি আরএস ব্যবহার করে একটি ইন্টারেক্টিভ কমান্ড চালাতে পারবেন না (যেমন দুর্বৃত্ত (6) বা vi (1)); পরিবর্তে rlogin (1) ব্যবহার করুন।
জাকুজে

1

আপনি sshযে কমান্ডটি ব্যবহার করছেন সেটি ইন্টারেক্টিভ কিনা তা কীভাবে বলা যায় ?

এই দুঃস্বপ্নটি আরও খারাপ করা হয় যখন আপনি বুঝতে পারেন যে আপনি একটি অ-ইউনিক্স ওএস চালিত কোনও মেশিনে লগ ইন করতে পারেন।

কোন সহজ সমাধান হচ্ছে একটি ক্ষেত্রে ডিফল্ট হতে হবে।


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