यह कैसे हो सकता है कि ssh somename काम करता है, जबकि nslookup somename नहीं करता है?


16

कैसे somenameमैं कर सकता हूँ कुछ होस्ट के आईपी पते को पता sshकरने के लिए? अगर मैं nslookupइस मेजबान पर करता हूं तो यह कहता है "कोई जवाब नहीं"। sshयह नाम कैसे हल कर सकता है ?


न तो /etc/hostsहै और न ही .ssh/configस्पष्टीकरण काम किया।


संपादित करें

क्षमा somenameपूरी तरह से योग्य है।

ssh somename.somedomain

काम करता है, जबकि

ping somename.somedomain

तथा

nslookup somename.somedomain

नहीं


12
में सूचीबद्ध है /etc/hostsया ~/.ssh/config?
स्टीफन किट

1
नाम को mDNS (मल्टिकास्ट डीएनएस) या एलएलएमएनआर (लिंक-लोकल मल्टिकास्ट नाम रिजॉल्यूशन) का उपयोग करके भी हल किया जा सकता है।
जोहान मायरेन

इसमें आपकी .ssh / config फाइल
Tagwint

1
@ आप पिंग करने की कोशिश कर सकते हैं somename.local.localmDNS के लिए आरक्षित एक विशेष डोमेन है। LLMNR के लिए आप इस NMAP स्क्रिप्ट का उपयोग कर सकते हैं ।
जोहान मायरेन

2
@mckenzm नहीं, यह नहीं होगा।
स्टीफन किट

जवाबों:


31

Nslookup इंटरनेट डोमेन नाम सर्वर को क्वेरी करने के लिए एक कार्यक्रम है । डीएनएस सर्वर को क्वेरी करने के लिए Nslookup बहुत अच्छा है लेकिन नाम रिज़ॉल्यूशन की बात आने पर यह आपको पूरी तस्वीर नहीं देता है।

लिनक्स नाम पर रिज़ॉल्यूशन एनएसएस द्वारा सबसे अधिक नियंत्रित किया जाता है जिसे कॉन्फ़िगर किया गया है /etc/nsswitch.conf। विशेष रूप से, इस कॉन्फ़िगरेशन में एक hostsप्रविष्टि है। उदाहरण के लिए:

hosts:          files dns

उपरोक्त प्रविष्टि में आप देख सकते हैं कि सबसे पहले क्वेराइड filesकिया जाता है dns, जिसका अर्थ है कि /etc/hostsDNS से ​​पहले क्वेर किया जाएगा। LDAP , मल्टिकास्ट DNS और WINS सहित अन्य विकल्प मौजूद हैं ।

सीधे अपने प्रश्न का उत्तर देते हुए, SSH होस्ट को NSS (कई स्रोतों से परिणाम खींचते हुए) का उपयोग करते हुए एक IP पते पर होस्ट करता है, जहाँ nslookup केवल DNS पर प्रश्न करता है।

आप यह देखने के लिए जांच कर सकते हैं कि कौन सा आईपी एनएसएस गेटअन का उपयोग करने के लिए एक होस्टनाम का समाधान करता है। उदाहरण के लिए हल करने के लिए somename:

getent hosts somename

इसके अलावा SSH के मामले में आप में मेजबान विशेष जानकारी कॉन्फ़िगर कर सकते हैं /etc/ssh/ssh_configऔर ~/.ssh/config। यह भी आप एक hostname के लिए एक आईपी पता निर्दिष्ट करते हैं, पूरी तरह से नाम समाधान लंघन होगा।:

निम्नलिखित SSH को 192.168.1.25दोनों के लिए उपयोग करने के लिए कहता है devऔर dev.example.com। SSH इस पते का उपयोग करेगा कि ये नाम एक अलग IP के लिए DNS नामों के रूप में मौजूद हैं या नहीं :

# contents of $HOME/.ssh/config
Host dev dev.example.com
    HostName 192.168.1.25

10

कैसे somenameमैं कर सकता हूँ कुछ होस्ट के आईपी पते को पता sshकरने के लिए?

कमांड के वर्बोज़ फ्लैग ( -v) का उपयोग करें ssh:

ssh somename -v

आउटपुट में अन्य बातों के साथ, एक पंक्ति होनी चाहिए जो उस सर्वर के हल किए गए आईपी को दिखाती है जिसे आप कनेक्ट कर रहे हैं:

debug1: Connecting to aur.archlinux.org [5.9.250.164] port 22.

यदि मैं इस मेजबान पर nslookup करता हूं तो यह कहता है "कोई जवाब नहीं"। sshयह नाम कैसे हल कर सकता है ?

sshहोस्टनाम को हल करने में सक्षम होने का सबसे संभावित कारण nslookupयह नहीं है कि यह sshस्तर पर कॉन्फ़िगर किया गया है।

प्रति मैनुअल पृष्ठ , वहाँ तीन स्थानों पर जहां config फ़ाइलों के लिए पर दिखता है:ssh_config(5)ssh

  1. कमांड लाइन विकल्प
  2. उपयोगकर्ता की कॉन्फ़िगरेशन फ़ाइल (~ / .ssh / config)
  3. सिस्टम-वाइड कॉन्फ़िगरेशन फ़ाइल (/ etc / ssh / ssh_config)

इन फ़ाइलों में से एक में आपका होस्टनाम somename(या एक पैटर्न जो इसे मेल खाता है) एक अन्य होस्टनाम या आईपी के उपनाम के रूप में हो सकता है। उदाहरण के लिए:

# explicit alias of somename to 8.8.8.8 IP
Host somename
    HostName 8.8.8.8

# pattern alias (that obviously matches somename) to another hostname
# that is itself resolved via DNS (and that can be nslookup-ed).
Host *
    HostName anotherhostname

कृपया अधिक जानकारी के लिए और निर्देशों के ssh_config(5)मैनुअल पेज स्पष्टीकरण Hostऔर अनुभाग को देखें।HostNamePATTERNS


यह उत्तर उस प्रश्न का उत्तर नहीं देता है, जो एक होस्ट नाम से पहचाना गया था, भले ही वह DNS सर्वर द्वारा सर्वर न हो।
जोहान मायरेन 15

1
उत्तर सही रूप से बहुत संभावित परिदृश्य का उल्लेख करता है जहां DNS नाम ssh user@someserverको "हल" करने के लिए लगता है someserver(भले ही ऐसा वास्तव में न हो)। यदि फ़ाइल Host someserverमें कॉन्फ़िगर किया गया .ssh/configहै, तो ssh कमांड का उपयोग करना संभव है, क्योंकि ओपी बताता है कि भले ही someserverDNS में बिल्कुल भी नहीं है।
फिशर

2
@ JohanMyréen ssh -v somenameआईपी ​​एड्रेस (किसी भी एंट्रीज की परवाह किए बिना ssh_config) से आउटपुट शामिल है । तो यह सीधे सवाल का जवाब देता है "मैं किसी होस्ट सोनाम का आईपी पता कैसे पता कर सकता हूं?", साथ ही साथ यह जवाब देने की दिशा में एक अच्छा पहला कदम है "यह कैसे हो सकता है कि ssh somename काम करता है ...?"।
जिगलीनागा

4

फिलिप लगभग वहाँ है, लेकिन .ssh/configराठौले को बंद कर देता है, जिसे आपने कॉन्फ़िगर नहीं किया है।

आज्ञा ...

getent hosts somename

... क्वेरी एनएसएस hosts:लुकअप लाइन का उपयोग करते हुए /etc/nsswitch.conf, केवल DNS के बजाय nslookupकरता है। यह संभावना है कि आपका यूनिक्स वातावरण एक से अधिक नामकरण सेवा का उपयोग कर रहा है; संभवतः कुछ प्रकार के AD एकीकरण।


3
मैं यह नहीं कहूंगा कि मैंने उस मार्ग को बंद कर दिया। मैंने पूर्णता के लिए एक "भी" जोड़ा।
फिलिप कपलिंग

@PhilipCouling ज़रूर, लेकिन आपका "पूर्व-भी" अधूरा है - आप यह नहीं दिखा रहे हैं कि जब कोई सवाल "nsloookup" के बारे में मनमाने ढंग से एक नाम हल करने के लिए कैसे हो।
रिच

3
जैसा कि पहले ही Q पर टिप्पणी की जा चुकी है, hostआम तौर पर बाइंड-बर्तन (या समतुल्य) का हिस्सा है और दोनों ही nslookupऔर digकेवल DNS का उपयोग करता है। OTOH getent hosts(या संभवतः ahosts) वह करता है जो आप वर्णन करते हैं।
dave_thompson_085

@ dave_thompson_085 गलत है। hostअन्य नाम सेवाओं पर सवाल। सहमत है कि getent hosts"किसी भी कॉन्फ़िगर नाम सेवाओं" को क्वेरी करने के लिए सबसे अच्छा अस्पष्ट तरीका है।
धनी

1
hostडीएनएस केवल मैन पेजों के अनुसार है और मेरे द्वारा उपयोग किए जाने वाले सिस्टम (CentOS, Ubuntu, FreeBSD, Solaris) के साथ-साथ अपस्ट्रीम पर परीक्षण करके पुष्टि की गई है । इसके अलावा (पास) डुप्स देखें मैंने क्यू पर टिप्पणी की जो यह भी कहता है।
dave_thompson_085
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.