नेटवर्क-निर्भर ~ /। Ssh / config?


15

कार्यालय में, मैं प्रॉक्सी के बिना आंतरिक मशीनों से जुड़ सकता हूं, लेकिन बाहरी कनेक्शन के लिए प्रॉक्सी की आवश्यकता है। कार्यालय के बाहर, मैं प्रॉक्सी के बिना अन्य बाहरी मशीनों से जुड़ सकता हूं, लेकिन आंतरिक मशीनों से जुड़ने के लिए 2 प्रॉक्सी में से एक का उपयोग करने की आवश्यकता है।

अगर मुझे पता चलता है कि मैं किस नेटवर्क पर ऑटोोडेट करने का तरीका बता सकता हूं, तो क्या मैं ssh को उपयुक्त कॉन्फिगर फाइल लोड करने का निर्देश दे सकता हूं?

यदि नहीं, तो शेल स्क्रिप्ट को लिखने के लिए एक और अधिक सुंदर समाधान है जो उचित विन्यास फाइल को ~ / .ssh / config (मेरा अब तक का सबसे अच्छा विचार) के समरूप करने के लिए है?

संपादित करें: मुझे लगता है कि @pcm और JonnyRo ने मेरे प्रश्न को समझा और मैं कोशिश करूँगा कि वे क्या सुझाव दें, लेकिन मैं स्पष्ट होना चाहता हूं, मैं चाहता हूं

|--------\    Dest   | abc.example.com | xyz.external.org |
| Source  \---------\|                 |                  |
|--------------------+-----------------+------------------|
| example.com office | No Proxy        | Proxy            |
| outside            | Proxy           | No Proxy         |

जवाबों:


11

आपके प्रॉक्सी को कैसे कॉन्फ़िगर किया गया है, इसके आधार पर, आप बस SSH कॉन्फ़िगरेशन प्रविष्टि बना सकते हैं जो किसी भी स्थिति में काम करती है। एक नेटवर्क पर उदाहरण के लिए मैं नियमित रूप से उपयोग करता हूं मुझे एक आउटबाउंड कनेक्शन के लिए इंटरमीडिएट होस्ट करने के लिए ssh करना होगा। इसलिए मूल रूप से मैं एक कॉन्फ़िगरेशन सेट करता हूं जो इस तरह दिखता है।

# proxy ssh 
Host *%sshproxy
    ProxyCommand ssh user@proxyhost.example.org /bin/netcat -w 1 $(echo %h | cut -d%% -f1) 22

Host myhost.example.org
    HostName 172.16.24.1

Host otherhost.example.com
    HostName 192.168.57.12

इसलिए जब मुझे प्रॉक्सी का उपयोग करने की आवश्यकता नहीं होती है, तो मैं बस एक कमांड चला सकता हूं ssh myhost.example.orgऔर जैसे जुड़ा हो सकता है, लेकिन जब मुझे प्रॉक्सी की आवश्यकता होती है, तो मैं कमांड चलाता हूं ssh myhost.example.org%sshproxy

मुझे संदेह है कि आप शायद किसी प्रकार के अन्य या ऑटो-पूर्ण सेटिंग को सेट कर सकते हैं जो स्वचालित रूप से %proxyबिट को जोड़ देगा ।


9

पुराना सवाल, लेकिन इस सूत्र में कुछ विचारों ने मेरी मदद की और यह एक समाधान है जो मैं लेकर आया हूं:

सबसे पहले, प्रॉक्सी सर्वर ssh कॉन्फ़िगरेशन।

Match Originalhost proxy Exec "ifconfig | grep 10.0.1"
     Hostname 10.0.1.2
Host proxy 
     Hostname external.hostname.com

फिर, सर्वर B कॉन्फ़िगरेशन:

Match Originalhost server-b Exec "ifconfig | grep 10.0.1"
     ProxyCommand none
Host server-b
     Hostname 10.0.1.3
     ProxyCommand ssh -W %h:%p server-a

यहाँ विचार यह है कि डिफ़ॉल्ट केस एक बाहरी साइट से कनेक्ट हो रहा है और ProxyCommand पहले प्रॉक्सी से ssh कनेक्शन शुरू करता है और फिर सर्वर-बी से कनेक्ट होता है । यदि, दूसरी ओर, हम पहले से ही स्थानीय सबनेट पर स्थित हैं, तो ProxyCommand अक्षम है और सर्वर-ए के लिए कोई प्रॉक्सी कनेक्शन नहीं है।

चाहे आप कहीं भी हों, आप हमेशा इस प्रविष्टि द्वारा सर्वर-एबीसी तक पहुंच सकते हैं और यह सेटअप यह पता लगाता है कि आप कहां हैं और तदनुसार कनेक्शन सेट करते हैं। के लिए सर्वर-xyz , बस एक ही विचार का उपयोग करें।

मैंने यहाँ अधिक गहन व्याख्या की: http://blog.kihltech.com/2017/04/ssh-conditional-host-address-based-on-network-or-location/


7

आप विभिन्न विन्यास फाइल से चयन करने के लिए -F विकल्प का उपयोग कर सकते हैं। दो नेटवर्क मामलों के लिए। फिर आप अलग-अलग कॉन्फ़िगरेशन फ़ाइलों का उपयोग करके उपनाम बना सकते हैं, जिसके आधार पर आप नेट पर हैं, या अपने आईपी पते के आधार पर अपने लॉगिन स्क्रिप्ट सेटअप में एक अन्य उपनाम है।


धन्यवाद! अगर मैं एक स्क्रिप्ट आईपी पर आधारित काम नहीं मिल सकता है, तो -F के साथ उपनाम निश्चित रूप से मेरी वापसी होगी।
नैट पार्सन्स

यह भयानक है, मैं बस एक ही सवाल पूछने वाला था। जब मैं एक नया टर्मिनल शुरू करता हूं, तो मैं पर्यावरण चर सेट करने के लिए पहले से ही कुछ अन्य विकल्पों की स्क्रिप्ट करता हूं, मैं आसानी से एक उपनाम बना सकता हूं या पर्यावरण के आधार पर उचित .ssh / config को सीलिंक कर सकता हूं।
newz2000

1

एक शेल स्क्रिप्ट लिखें जो आपके आईपी को एक पैटर्न के खिलाफ जांचती है, फिर उपयुक्त शेल स्क्रिप्ट को सिमिलिंक करता है।

यदि किसी कारण से आपकी IP रेंज घर और कार्य के लिए समान है, तो /etc/resolv.conf के आधार पर स्विच करने का प्रयास करें, जिसमें DHCP कॉन्फ़िगर DNS सर्वर शामिल हैं।


0

.Ssh / config में "होस्ट" विकल्प आपको गंतव्य के आधार पर कॉन्फ़िगरेशन बदलने देता है। मैं पोर्ट फ़ॉरवर्डिंग और जहाँ मैं जा रहा हूँ, उसके आधार पर इस तरह का समायोजन करने के लिए उपयोग करता हूँ।


0

मैंने अतीत में इस सवाल पर गौर किया है और एक संभव समाधान यह है कि कॉन्फिग फाइल में ऐसी प्रविष्टि हो:

Host ENTRY_POINT
Hostname ENTRY_POINT_FQDN
User USERNAME

Host *.INSIDE_DOMAIN
ProxyCommand ssh ENTRY_POINT nc %h %p

इस तरह, यदि आप बाहर हैं, तो आप $ ssh machine.inside_domain को $ कर सकते हैं। यदि आप अंदर हैं और हल करने के लिए dns हैं, तो आप $ ssh मशीन कर सकते हैं। वह मेरे लिए अच्छा काम करता है।

हो सकता है कि कोई व्यक्ति इस विचार में सुधार कर सकता है, हो सकता है कि डीएनएस कॉन्फ़िगरेशन को बदल रहा है इसलिए यह स्वचालित रूप से मशीन के लिए मशीन का समाधान करता है। यदि आप बाहरी हैं और एसएसएच प्रवेश बिंदु का उपयोग करते हैं।

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