डोमेन नाम के बिना hostname द्वारा आंतरिक रूप से सर्वर पर ssh कैसे करें?


10

मुझे अपना काम पूरा करने के लिए कई सर्वरों पर लॉग इन करना होगा। मैं एक सर्वर का FQDN टाइप करने के लिए उपयोग करने के लिए थक गया हूँ। मैं अपने निजी नेटवर्क पर ssh के माध्यम से लॉग इन / आउट कर रहा हूं। मुझे यकीन है कि 99% यह हमारे अपने निजी नेटवर्क b / c पर है सभी सर्वरों में ip addr 10.xyz है। क्या केवल होस्टनाम और डोमेन नाम के साथ सर्वर में ssh करने का कोई तरीका है?

हमारे पास कई देशों में सर्वर हैं। हमारे सर्वर का नाम बहुत लंबा है। इसका नाम इस प्रकार है:

hostname.country.domainname.com

में कार्पल टनल टाइपिंग करवा रहा हूँ ssh me@hostname1.country.domainname.com

... हर बार मैं अपने एक सर्वर तक पहुँचता हूँ। अगर मैं यूएस में हूं और मैं अमेरिका में एक और होस्ट को एक्सेस करने की कोशिश करता हूं, तो मैं बस टाइप कर सकता ssh me@hostname2हूं और मैं ठीक कनेक्ट करता हूं। हालांकि, अगर मैं अमेरिका में हूं और इंग्लैंड में एक सर्वर से जुड़ने की कोशिश करता हूं, तो मैं टाइप ssh me@hostname3.engऔर कनेक्ट नहीं कर सकता hostname3

मैंने जो वर्कअराउंड किया, वह कुछ सर्वरों के लिए मेरे ~ / .shsh / config फाइल में एक अन्य नाम था। हालाँकि, मुझे नहीं लगता कि उस फ़ाइल में 1000+ सर्वर जोड़ना संभव है। मैंने पहले ही 20+ सर्वर जोड़ दिए हैं और मेरे सहकर्मी सोचते हैं कि मैं पागल हूं, हालांकि मुझे लगता है कि जब वे चारों ओर sshing करते हैं तो वे FQDN टाइप करने के लिए पागल होते हैं।

क्या हमारे लिए कुछ सेट करने का एक आसान तरीका है ताकि हमें हर बार अपने domainname.com में टाइप न करना पड़े?

जवाबों:


18

आप %hअपने कॉन्फ़िगरेशन में वाइल्डकार्ड और उपयोग कर सकते हैं

जैसे

Host *.eng
  Hostname %h.domainname.com

अब जब आप ssh foo.engयह करने के लिए कनेक्ट करने की कोशिश करेंगे foo.eng.domainname.com

आप इस विन्यास में अन्य विकल्प भी जोड़ सकते हैं; उदाहरण के लिए उपयोगकर्ता नाम मजबूर करना

Host *.eng
  Hostname %h.domainname.com
  User me

अब जब आप ऐसा ssh foo.engकरेंगे तो यह foo.eng.domainname.comउपयोगकर्ता के रूप में जुड़ने का प्रयास करेगा me

% ssh foo.eng
ssh: Could not resolve hostname foo.eng.domainname.com: Name or service not known

(ठीक है, जाहिर है मुझे एक त्रुटि मिलती है इससे पहले कि यह मेरे लिए एक वैध होस्टनाम नहीं है!)

इसलिए अब आपको प्रति देश केवल एक नियम की आवश्यकता है।


मेरा पहला विचार DNS उपनाम था, दूसरा मेजबान फ़ाइल था, लेकिन मुझे याद आया कि कई सर्वर हैं। यह समाधान उत्कृष्ट दिखता है। आपने जो कॉन्‍फ़िगरेशन लाइन की है, वह आपके द्वारा पोस्ट की गई है?
Xalorous

यह अंदर जाता है $HOME/.ssh/configया आप इसे सिस्टम में चौड़ा कर सकते हैं/etc/ssh/ssh_config
स्टीफन हैरिस

इसके साथ काम करता है user@*.eng?
Xalorous

3
नियम के साथ मैंने लिखा है कि आप कर सकते हैं ssh foobar@somewhere.engऔर यह उम्मीद के मुताबिक काम करेगा। यह सब होस्टनाम घटक को फिर से लिखना है। यह भी साथ काम करेंगे scpऔर sftpऔर इतने पर।
स्टीफन हैरिस

9

अगर आप जोड़ते हैं

search domainname.com

करने के लिए /etc/resolv.conf, और उपयोग hostname.country, ssh(और अन्य नेटवर्क कार्यक्रम, उस बात के लिए) स्वचालित रूप से संलग्न domainname.comके लिए आप 1

मुझे नहीं लगता कि अलग-अलग देश के डोमेन को अपने searchरास्ते में जोड़ना एक अच्छा विचार है क्योंकि आपको अप्रत्याशित व्यवहार मिल सकता है यदि दो अलग-अलग देशों में दो सर्वर एक ही होस्टनाम 2 साझा करते हैं

मेरा मानना ​​है कि यह विधि sshकॉन्फ़िगरेशन बदलने से बेहतर है क्योंकि यह hostname.countryआपके द्वारा उपयोग किए जा रहे प्रोग्राम की परवाह किए बिना हल करने की अनुमति देता है ( telnet,, वीएनसी, ...)।

देख resolv.conf(5)


1 अधिक सटीक रूप से, domainname.comयदि यह अपने आप हल नहीं कर सकता है तो यह आगे बढ़ेगा hostname.country

2 ऐसे परिदृश्य hostnameमें देश में उस सर्वर का समाधान होगा जिसका डोमेन पहले searchपथ में सूचीबद्ध है।


2
BTW आप इसे गैर-रूट और प्रति प्रक्रिया के रूप में env variable LOCALDOMAIN द्वारा भी कर सकते हैं। man resolv.conf
रदिइमियर

यह SSH होस्ट को हल करने के लिए काम करता है, लेकिन यदि आप GSS / Kerberos का उपयोग कर रहे हैं तो नाम मैच नहीं करेंगे और ऑटिहिंग विफल हो जाएगा।
निक टी

7

आप CanonicalDomainsअपने ssh config में विकल्प का उपयोग कर सकते हैं ।

निम्नलिखित को अपने ssh config फाइल में जोड़ने domainname.comसे ssh को अपने नाम पर किसी भी होस्ट से जुड़ने की कोशिश करनी होगी, जिसके पास अधिकतम 1 डॉट है:

CanonicalizeHostname yes
CanonicalDomains domainname.com

इस विन्यास के साथ ssh foo.engसबसे पहले कोशिश करेंगे foo.eng.domainname.com, और foo.engअगर मेजबान नहीं मिल सकता है तो कमबैक करें । इसी तरह, ssh github.comपहले प्रयास करेंगे github.com.domainname.com, इसलिए यदि आप GitHub से कनेक्ट करना चाहते हैं, तो आपके DNS सर्वर को गैर-मौजूदा होस्ट के लिए रिकॉर्ड वापस नहीं करना चाहिए।

यह CanonicalizeMaxDotsनियंत्रित करने के लिए उपयोग किया जा सकता है कि होस्टनाम में कितने डॉट्स दिखाई दे सकते हैं इससे पहले कि वह पूरी तरह से योग्य समझता है और अपेंड नहीं करता है domainname.com। यह 1 को डिफॉल्ट करता है जो आपके पास वर्तमान में आपके द्वारा दी गई स्कीम के लिए पर्याप्त होना चाहिए, लेकिन अगर आपको कभी ऐसा कुछ मिलता है, तो आपको hostname.city.countryइसे बढ़ाने की आवश्यकता होगी।

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