जवाबों:
डिफ़ॉल्ट रूप से, जब आप ssh का उपयोग करके रिमोट मशीन पर कमांड चलाते हैं, तो दूरस्थ सत्र के लिए TTY आवंटित नहीं किया जाता है। यह आपको TTY quirks से निपटने के बिना बाइनरी डेटा आदि को स्थानांतरित करने की सुविधा देता है। यह वह वातावरण है जिसे कमांड निष्पादित के लिए प्रदान किया गया है computerone
।
हालाँकि, जब आप किसी दूरस्थ कमांड के बिना ssh चलाते हैं, तो यह TTY आवंटित करता है, क्योंकि आप एक शेल सत्र चलाने की संभावना रखते हैं। यह ssh otheruser@computertwo.com
कमांड द्वारा अपेक्षित है , लेकिन पिछले स्पष्टीकरण के कारण, उस आदेश के लिए कोई TTY उपलब्ध नहीं है।
यदि आप एक शेल चाहते हैं computertwo
, तो इसके बजाय इसका उपयोग करें, जो दूरस्थ निष्पादन के दौरान TTY आवंटन को बाध्य करेगा:
ssh -t user@computerone.com 'ssh otheruser@computertwo.com'
यह आमतौर पर तब उचित होता है जब आप अंततः ssh श्रृंखला के अंत में एक शेल या अन्य संवादात्मक प्रक्रिया चला रहे होते हैं। यदि आप डेटा ट्रांसफर करने जा रहे हैं, तो इसे जोड़ना न तो उचित है और न ही आवश्यक है -t
, लेकिन तब हर ssh कमांड में डेटा-प्रोडक्शन या -सॉन्समिंग कमांड शामिल होगा, जैसे:
ssh user@computerone.com 'ssh otheruser@computertwo.com "cat /boot/vmlinuz"'
SSH को रिले के रूप में उपयोग करने का एक बेहतर तरीका है: ProxyCommand
विकल्प का उपयोग करें । आपको क्लाइंट मशीन पर एक कुंजी की आवश्यकता होगी जो आपको दूसरे कंप्यूटर में लॉग इन करने की अनुमति देता है (सार्वजनिक कुंजी वैसे भी अधिकांश परिस्थितियों में SSH का उपयोग करने का अनुशंसित तरीका है)। इसे अपने अंदर रखो ~/.ssh/config
और चलाओ ssh computertwo
।
Host computerone
HostName computerone.com
UserName user
Host computertwo
HostName computertwo.com
UserName otheruser
ProxyCommand ssh computerone exec nc %h %p
nc
है netcat । उपलब्ध कई संस्करणों में से कोई भी करेगा।
आप ssh में PROXY जंप विकल्प का उपयोग कर सकते हैं
-J [user@]host[:port]
Connect to the target host by first making a ssh connection to the jump host and then establishing a TCP forwarding to the ultimate destination from there. Multiple jump hops may be specified
separated by comma characters. This is a shortcut to specify a ProxyJump configuration directive.
इसलिए अगर मुझे hostB से जुड़ना है लेकिन मुझे वहां पहुंचने के लिए पहले hostA से गुजरना होगा। आम तौर पर मैं होता
ssh hostA
[user@hostA ~]$ ssh hostB
मैं अब यह करता हूं
ssh -J hostA hostB
[user@hostB ~]$
आप कमांड लाइन से एक SSH विन्यास विकल्प "RequestTTY" को ओवरराइड कर सकते हैं।
कई कमांड चलाने के बाद SSH सत्र में मेरा काम करने का उदाहरण cd-serv-one.sh
शुरू होता /bin/bash
है:
#!/bin/bash
ssh -o "requestTTY=yes" User@ExampleHostName "cd /home/myPathFoo/myPathBar; /bin/bash"
और अब मैं सिर्फ ./cd-serv-one.sh
एक आवश्यक SSH सत्र शुरू करने के लिए दौड़ता हूं ।
ssh
!