Ssh के बजाय ssh -t कब उचित नहीं होगा?


15

दूरस्थ सर्वर से कनेक्शन के ssh -tबदले उपयोग करने के sshकई फायदे हैं। उदाहरण के लिए, मैं सीधे किसी फ़ाइल को vim के साथ संपादित कर सकता हूं: ssh -t host vim foo.txtजो अन्यथा विफल हो जाएगी।

क्या कोई ऐसी परिस्थितियां हैं जिनके तहत ssh का उपयोग करते समय एक (छद्म) -आइटी आवंटित करना एक बुरी बात होगी?

जवाबों:


11

इनपुट को पाइप करते समय या इनपुट वापस पाने पर, जो "ssh host कमांड" का विशिष्ट उपयोग है। नियंत्रण वर्णों की व्याख्या TTY परत (पूर्व के लिए ^ S) द्वारा की जा सकती है।


10

हां, कभी-कभी आप एक मूक, पृष्ठभूमि वाले कनेक्शन बनाना चाहते हैं, उदाहरण के लिए सुरंग स्थापित करते समय (जैसे SOCKS प्रॉक्सी)। इस तरह के उदाहरणों में, आप चाहते हैं कि प्रक्रिया टटी न हो।

यहां लोकलहोस्ट से पोर्ट को फॉरवर्ड करने का एक उदाहरण है कुछ दूरस्थ होस्ट ...

ssh -l username -fNTL 8073:server:873

इसके बाद इसे स्थापित किया गया है, तो आप दूरस्थ होस्ट के बजाय, स्थानीय होस्ट के लिए rsync कर सकते हैं, इसलिए प्रभावी रूप से, अपने rsync के माध्यम से सुरंग बनाना ssh...

rsync --port=8073 -a me@localhost::myStuff /tmp/myStuff/

आप यह कहेंगे कि यदि rsync बाहर जाना serverअवरुद्ध था, लेकिन sshनहीं था।


धन्यवाद, यह सही भी था, लेकिन मैंने दूसरे को वोट दिया क्योंकि यह एक अधिक गंभीर मुद्दा था जिसकी मैंने अनदेखी की थी।
एलेक्स जे

3

उपरोक्त के अतिरिक्त...

(1) विभिन्न टिल्डा एस्केप हैंडलिंग:

"~।" यदि आपके पास एक पेंटी (-t) है तो पलायन आपको रोक देगा। लंबे समय तक चलने वाली कमांड के लिए, आप किसी को गलती से इस प्रक्रिया को रोकने से रोक सकते हैं यदि वे टाइप करते हैं ~।

$ ssh hostname.tomontime.com -t नींद 60
[टाइप ~। और यह डिस्कनेक्ट करता है]
hostname.tomontime.com पर कनेक्शन बंद।

$ ssh hostname -T नींद 60
[मैं टाइप ~। और यह इसे सामान्य कीस्ट्रोक्स की तरह मानता है, जो नींद की आज्ञा को अनदेखा करता है।]
~
~।

CTRL-C के साथ भी यही कोशिश करें। आप देखेंगे कि -t के साथ आप "नींद" के लिए CTRL-C भेज रहे हैं। -T के साथ आप अपनी मशीन पर चलने वाले ssh प्रोग्राम में CTRL-C भेज रहे हैं। ऐसा समय हो सकता है जब इसमें अंतर होता है (अर्थात प्रोग्राम HUP से अलग INT को संभालता है)

(2) आप केवल पीटीआई या नेटवर्क कनेक्शन गतिविधि को कम करना चाहते हैं।

जब आप ऐसी मशीन को रिबूट करने की कोशिश कर रहे हैं, जो कि आपकों से बाहर है, तो आप सिस्टम को प्रोत्साहित नहीं करना चाहते हैं कि वह एक पैसा आवंटित करने की कोशिश करे! यह नेटवर्क कनेक्शन को भी कम करता है जिसे बंद करना होगा (रिबूट में देरी)।

यह तेजी से और अधिक मज़बूती से काम करेगा:
ssh -T hostname रिबूट

इससे समस्याएँ हो सकती हैं:
ssh -t hostname रिबूट


2

ssh -t रिमोट मशीन पर एक छद्म टर्मिनल बनाता है। यह उपयोगी है यदि आप कई सर्वरों के माध्यम से ssh कमांड्स को चेंज कर रहे हैं और दूर की तरफ एक वास्तविक टर्मिनल चाहते हैं (इसलिए आप उदाहरण के लिए 'vi' का उपयोग कर सकते हैं)।

टर्मिनल होने पर लॉगिन स्क्रिप्ट अलग तरीके से व्यवहार करने पर आपको '-t' नहीं चाहिए। यह खराब अभ्यास IMHO है, लेकिन मैंने ऐसे मामलों को देखा है, जहां 1 से पहले टीटीवाई के लिए एक लॉगिन स्क्रिप्ट की जांच होती है), और 2) कई इंटरैक्टिव अनुप्रयोगों के लिए पथ का विस्तार करते हुए।

एक अन्य उदाहरण में (ऊपर टॉमऑन टाइम द्वारा उल्लिखित), मैं वास्तव में उन मामलों में चला गया हूं जहां सभी TTY (ptys) का उपयोग किया जाता है। जाहिर है एक गलत विन्यास, लेकिन सुरंगों और rsyncs के एक समूह के लिए एक संसाधन चबाने की कोई जरूरत नहीं है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.