एक तीसरी मशीन के लिए सुरंग के लिए सही ssh विन्यास फाइल सेटिंग्स


20

मैं एक पुल सर्वर के माध्यम से एक सर्वर के लिए सुरंग की कोशिश कर रहा हूँ। अब तक, मैं निम्नलिखित कमांड का उपयोग करके इसे कमांड शेल से ठीक से काम कर पाने में सक्षम था:

ssh -A -t bridge_userid@bridgemachine.com ssh -A remote_userid@remoteserver.com

लेकिन मैं इसे अपनी ~/.ssh/configफ़ाइल में लपेटने की कोशिश कर रहा हूं और मुझे परेशानी है। मैंने कोशिश की:

Host axp
  User          remote_userid
  HostName      remoteserver.com
  IdentityFile  ~/.ssh/id_rsa.eric
  ProxyCommand ssh -A -t bridge_userid@bridge_userid.com ssh -A remote_userid@%h

लेकिन जब मैं करता हूं, मुझे निम्न त्रुटि संदेश मिलता है remoteserver.comऔर मुझे यकीन नहीं है कि यह क्या कारण है:

ksh: SSH-2.0-OpenSSH_6.8 ^ M: नहीं मिला

मुझे पता है कि जब मैं लॉग इन करता remoteserver.comहूं, तो मेरा शेल होता है /usr/bin/ksh

मैंने कॉन्फ़िगर फ़ाइल में ssh कमांड में पथ तर्क जोड़ने की कोशिश की है, लेकिन इससे कोई फर्क नहीं पड़ा।

किसी भी विचार यह क्या हो सकता है?


यह सिर्फ ProxyCommandउपयोग करने के लिए कैसे नहीं है। आमतौर पर इसका उपयोग netcat के साथ किया जाता है, जहां ssh इसके माध्यम से अपने आउटपुट को पाइप कर रहा है और netcat remoteserver SSH पोर्ट के लिए सुरंग के रूप में कार्य कर रहा है । ssh -W %h:%p bridge_userid@bridgemachine.comयदि आप उस सुविधा का उपयोग करना चाहते हैं तो आपको ProxyCommand की आवश्यकता है ।
DanSut

दुर्भाग्य से मेरे ब्रिज सर्वर में नेटकैट स्थापित नहीं है, इसलिए मैं इसे किसी और तरीके से काम करने की कोशिश कर रहा हूं। मुझे लगा कि अगर यह कमांड लाइन से काम कर सकता है, तो एक फ़ाइल में जानकारी डालने का एक तरीका होना चाहिए।
एरिक बी।

आपके कमांड लाइन के उपयोग में जो आप ssh -A remote_userid@remoteserver.comपुल मशीन पर चलाने के लिए एक कमांड के रूप में काम कर रहे हैं , कॉन्फ़िगरेशन आपको डिफ़ॉल्ट कमांड की आपूर्ति करने का एक तरीका नहीं देता है। आप अपने आप में क्या करने का प्रयास करते हैं works, लेकिन तब ssh ProxyCommandएक सुरंग के रूप में आपके उपयोग की कोशिश करता है और एसएसएच प्रोटोकॉल को नीचे गिराना शुरू कर देता है, जहां एसएसएच प्रोटोकॉल के लिए सुनने वाले एसडीएस के बजाय दूसरे छोर पर प्रतीक्षा कर रहा है।
डैनसुत

@dansut ने बहुत अच्छा काम किया। धन्यवाद!
एरिक बी।

जवाबों:


25

जकूज़ी का जवाब सही है, लेकिन ओपनएसएसएच के बाद से 7.3, आप अब उपयोग कर सकते हैं -J ProxyJumpजो आसान है। मेरे नोट देखें:

ओपनएसएसएच 7.3या उससे ऊपर

का उपयोग करें ProxyJump। जैसा कि मैनुअल में बताया गया है:

-J [उपयोगकर्ता @] मेजबान [: बंदरगाह]
पहले कूद गंतव्य के लिए एक ssh कनेक्शन बनाकर लक्ष्य मेजबान से कनेक्ट करें और फिर वहां से अंतिम गंतव्य के लिए एक टीसीपी अग्रेषण की स्थापना। एकाधिक कूद हॉप अल्पविराम वर्णों द्वारा अलग किए जा सकते हैं। यह ProxyJump कॉन्फ़िगरेशन निर्देश निर्दिष्ट करने के लिए एक शॉर्टकट है।

ProxyJump ~/.ssh/configउदाहरण है

~/.ssh/config

Host server1
  Hostname server1.example.com
  IdentityFile ~/.ssh/id_rsa

Host server2_behind_server1
  Hostname server2.example.com
  IdentityFile ~/.ssh/id_rsa
  ProxyJump server1

साथ जुडा हुआ

ssh server2_behind_server1 -v

-vक्रिया आउटपुट के लिए जोड़ें

ProxyJump -Jकमांड लाइन उदाहरण

~/.ssh/config

Host server1
  Hostname server1.example.com
  IdentityFile ~/.ssh/id_rsa

Host server2
  Hostname server2.example.com
  IdentityFile ~/.ssh/id_rsa

साथ जुडा हुआ

ssh server2 -J server1 -v

या उपयोग करें -o

ssh server2 -o 'ProxyJump server1' -v

ओपनएसएसएच 5.4या उससे ऊपर

के ProxyCommandसाथ प्रयोग करें-W

~/.ssh/config

Host server1
  Hostname server1.example.com
  IdentityFile ~/.ssh/id_rsa

Host server2
  Hostname server2.example.com
  IdentityFile ~/.ssh/id_rsa
  ProxyCommand ssh server1 -W %h:%p

साथ जुडा हुआ

ssh server2 -v

या उपयोग करें -o

ssh server2 -o 'ProxyCommand ssh server1 -W %h:%p' -v

ओपनएसएसएच बोल्ड 5.4

~/.ssh/config

Host server1
  Hostname server1.example.com
  IdentityFile ~/.ssh/id_rsa

Host server2
  Hostname server2.example.com
  IdentityFile ~/.ssh/id_rsa
  ProxyCommand ssh server1 nc %h %p 2> /dev/null

साथ जुडा हुआ:

ssh server2 -v

या उपयोग करें -o

ssh server2 -o 'ProxyCommand ssh server1 nc %h %p 2> /dev/null' -v

सूत्रों का कहना है

-Jओपनएसएसएच 7.3 में जोड़ा गया

  • ssh (1): एक प्रॉक्सीजंप विकल्प और संबंधित -J कमांड-लाइन फ्लैग को एक या एक से अधिक SSH गढ़ों या "जंप मेजबानों" के माध्यम से सरलीकृत अप्रत्यक्षता की अनुमति दें।

-Wओपनएसएसएच 5.4 में जोड़ा गया

  • Ssh (1) में एक 'netcat मोड' जोड़ा गया: "ssh -W host: port ..." यह क्लाइंट पर stdio को सर्वर पर मौजूद सिंगल पोर्ट से जोड़ता है। यह अनुमति देता है, उदाहरण के लिए, मध्यवर्ती सर्वर के माध्यम से कनेक्शन को रूट करने के लिए ProxyCommand के रूप में ssh का उपयोग करना। BZ # 1618

3

आपको netcatअपने पुल की आवश्यकता नहीं है । जैसा कि DanSut ने टिप्पणियों में प्रस्तावित किया था आप ssh -Wइसके बजाय कमांड लाइन विकल्प का उपयोग कर सकते हैं , यह कॉन्फ़िगरेशन आपके लिए काम करना चाहिए:

Host axp
  User          remote_userid
  HostName      remoteserver.com
  IdentityFile  ~/.ssh/id_rsa.eric
  ProxyCommand ssh -AW %h:%p bridge_userid@bridge_userid.com

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