ProxyCommand और netcat मोड का उपयोग करते समय कॉन्फ़िगर से होस्टनामों को हल करें


16

मैं ssh कनेक्शन को बाउंस करने के लिए कुछ सार्वभौमिक विकल्प स्थापित करने का प्रयास कर रहा हूं। यहाँ मेरी ~/.ssh/configफ़ाइल है, संक्षिप्त:

Host *%via
  ProxyCommand ssh gateway -W $(echo %h | cut -d%% -f1) %p

Host gateway
  HostName gateway.example.com
  User username
  ForwardAgent yes
  IdentityFile keypathg

Host target
  User username
  HostName target.example.com
  IdentityFile keypatht

जब मैं उपनामों का *%viaउपयोग करता Hostहूं, तो मुझे मिलता है:

% ssh -vvv target%via
OpenSSH_5.9p1, OpenSSL 0.9.8y 5 Feb 2013
debug1: Reading configuration data /Users/myuser/.ssh/config
debug1: /Users/myuser/.ssh/config line 5: Applying options for *
debug1: /Users/myuser/.ssh/config line 12: Applying options for *%via
debug1: Reading configuration data /etc/ssh_config
debug1: /etc/ssh_config line 20: Applying options for *
debug1: auto-mux: Trying existing master
debug1: Control socket "/Users/myuser/.ssh/tmp/target%via_22_myuser" does not exist
debug2: ssh_connect: needpriv 0
debug1: Executing proxy command: exec ssh -A gateway -W $(echo target%via | cut -d% -f1):22
debug1: permanently_drop_suid: 501
debug1: identity file /Users/myuser/.ssh/id_rsa type -1
debug1: identity file /Users/myuser/.ssh/id_rsa-cert type -1
debug1: identity file /Users/myuser/.ssh/id_dsa type -1
debug1: identity file /Users/myuser/.ssh/id_dsa-cert type -1
ssh_exchange_identification: Connection closed by remote host

हालांकि, अगर मैं उपयोग करता हूं

% ssh target.example.com%via

मैंने टारगेट सर्वर को हिट किया, लेकिन गलत उपयोगकर्ता के रूप में और बिना प्यूबिक प्रमाणीकरण के।

मुझे लगता है कि मेरा सवाल, इस बिंदु पर, शेख़ी की यह विधि है, जब उपयोग ForwardAgent, मेरे ssh config / वातावरण पूरे, या बस चाबियाँ के माध्यम से गुजरती हैं। अगर सिर्फ चाबियाँ, तो क्या किसी तरह से पूर्व का उपयोग किया जा सकता है?

मेरा ssh संस्करण 5.9v1 है, गेटवे 5.9v1 है, और लक्ष्य 5.3p1 है। मेरा मानना ​​है -Wकि 5.4 में पेश किया गया था, लेकिन यह लाइन में अंतिम बॉक्स के लिए मायने नहीं रखना चाहिए? पुराने स्कूल का उपयोग करना ncअलग नहीं है।

मैंने सत्यापित किया है कि मैं पंक्ति में प्रत्येक बॉक्स पर मैन्युअल रूप से ssh कर सकता हूं। ऐसा करना इंगित करता है कि hostname उर्फ ​​जानकारी पास नहीं है, जब गेटवे पर, मैं नहीं कर सकता, ssh targetलेकिन मैं कर सकता हूं ssh target.example.com। यह pubkey कोष्ठक के साथ काम करता है। गेटवे और लक्ष्य के संयोग से एक ही उपयोगकर्ता नाम है, यही कारण है कि यह काम करता है यदि कोई कॉन्फ़िगरेशन पुश नहीं किया गया है।

अगर ForwardAgentया इसी तरह का कॉन्फिगर इस जानकारी को आगे नहीं बढ़ा सकता है, तो इस जानकारी के साथ गेटवे पर एक .ssh / कॉन्फिगरेशन रखते हुए इसके आसपास जाने का सबसे पवित्र तरीका क्या है?

जवाबों:


14

वाह, यह सवाल पूछने के लिए धन्यवाद। मुझे यह देखने में दुर्लभ लगता है कि कोई व्यक्ति SSH का पूरी तरह से शोषण कर रहा है और यह सवाल कुछ क्षेत्रों पर हिट है।

यह कोई ProxyCommandमुद्दा नहीं है । ProxyCommandबस दूरस्थ क्लाइंट से बात करने की कोशिश कर रहा से पहले तैयार करने में कुछ करने के लिए स्थानीय SSH ग्राहक निर्देश देता है। हां, हमारे उदाहरण में, हम एक और ssh सत्र से बात करते हैं, लेकिन वह सत्र, -Wबस हमारे इनपुट के साथ लेता है और इसे दूसरी मशीन पर भेज देता है। आप सोच सकते हैं कि प्रारंभिक सत्र सत्र पूरी तरह से स्वतंत्र है। अपरिहार्य कार सादृश्य: आपकी कार एक ही कार है, चाहे आपको बिंदु A से बिंदु B तक जाने के लिए नौका की सवारी करनी पड़े।

यह कोई ForwardAgentमुद्दा नहीं है । ForwardAgentस्थानीय क्लाइंट ने एक सुविधा प्रदान की है जो स्थानीय कुंजी को दूरस्थ सत्र के वातावरण में उपलब्ध कराती है। आपने दूरस्थ सत्र की स्थापना करते हुए अतीत को प्राप्त नहीं किया है।

यह एक .ssh/configप्रारूप मुद्दा है। दूसरी और तीसरी डिबग 1 लाइनों पर ध्यान दें। वे सूचीबद्ध करते हैं कि होस्ट श्लोक आपके द्वारा लागू किए जा रहे हैं .ssh/config। आप ध्यान दें कि $ ssh target.example.com%viaकाम करता है, लेकिन गलत उपयोगकर्ता नाम और कुंजी के रूप में। खैर, के लिए श्लोक Host targetपढ़ा नहीं जा रहा है (जो सही उपयोगकर्ता नाम और कीफ़ाइल प्रदान करेगा)। किन छंदों का उपयोग किया जाता है? *और *%via

पास करने के लिए ये विकल्प कैसे प्राप्त करें? खैर, काफी दिलचस्प है, वाइल्डकार्ड 0 लंबाई के तार से मेल खाता है। Host target*से मेल खाएगी target, target%via, target.example.comऔर target.example.com%via

और इसलिए आप सवाल पूछते हैं, मशीन की मदद .ssh/configपर सेटिंग करेगा gateway। नहीं, ऐसा नहीं होगा। इसे कभी पढ़ा नहीं जाएगा। हमारे स्थानीय मशीन से सब कुछ हो रहा है।

सभी मैंने समझाया है, केवल जवाब देता है कि $ ssh target.example.com%viaकाम क्यों नहीं कर रहा है।

आप पसंद करते हैं $ ssh target%via। ठीक है, यह अधिक सुविधाजनक है। संक्षिप्त रूप विफल हो रहा है, क्योंकि होस्टनाम के रूप में, targetनहीं मिला है; यह हल नहीं है। क्यों ssh नहीं उगल रहा है ssh: Could not resolve hostname target: Name or service not known:? क्योंकि ProxyCommandपहले ही सफलतापूर्वक स्थापित हो चुका है। एक ssh कनेक्शन के तत्वों का निर्माण किया गया है, लेकिन hostname विफलता हो रही है जहां यह उम्मीद नहीं कर रहा है, और इसलिए यह अधिक सामान्य संदेश के साथ बमबारी कर रहा है। मैं इस पर एक बग रिपोर्ट दर्ज करूंगा, ताकि डिबग जानकारी को बेहतर बनाया जा सके।

अंतिम टिप्पणी:

मुझे Host *%viaवाक्य रचना पसंद है । यह साफ है, फिर भी लचीला है। मैंने पहले देखा था Host *+*और यह %h(ost)निर्धारित करने के लिए पहले और आखिरी भाग का उपयोग करता है कि कहाँ जाना है। लेकिन यह आपके दिमाग को उस ओर ले जाने के लिए थोड़ा और प्रयास करता है। लिंक: http://wiki.gentoo.org/wiki/SSH_jump_host

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