เหตุใด SSH จึงไม่แก้ไขชื่อโฮสต์นี้


12

เมื่อฉันพยายามที่จะ SSH ไปยังโฮสต์บนเครือข่ายชื่อstorageฉันได้รับการแก้ไข DNS ล้มเหลว:

$ ssh storage
ssh: Could not resolve hostname storage: Name or service not known

แต่เมื่อฉันสอบถาม DNS กับโฮสต์มันใช้งานได้

$ host storage
storage has address 192.168.20.103

มันเป็นวิธีที่hostสามารถค้นหา IP แต่sshไม่สามารถ?


14
เริ่มทำความคุ้นเคยกับการใช้ FQDN ได้ทุกที่ หากนี่เป็นปัญหาแรกที่คุณเจอในบรรทัดเหล่านี้คุณโชคดีเป็นพิเศษ สิ่งเหล่านี้มีขนดกมากที่จะติดตามและมันจะไม่ใช่ครั้งสุดท้ายของคุณ นี่คือคำใบ้: storageเป็นโดเมนระดับบนสุดที่ถ่ายทอดสดบนอินเทอร์เน็ต
Michael Hampton

คุณสามารถ 'ssh' ถึง 192.168.20.103 ได้หรือไม่?
IvanGoneKrazy

2
คุณกำหนดชื่อโฮสต์ไว้ที่ 192.168.20.103 ที่ไหน / etc / hosts?
เด็กกำพร้า

3
การพิมพ์ FQDNs เป็นความเจ็บปวด การใช้ชื่อแทน "พื้นที่เก็บข้อมูล" เป็น "พื้นที่จัดเก็บข้อมูลโดเมน" ใน. ssh / config ในทางกลับกันนั้นมีประโยชน์จริง ๆ
pjc50

1
@ pjc50 ฉันพิมพ์stoแล้วกด Tab
Michael Hampton

คำตอบ:


28

sshและhostแก้ไขชื่อตามเส้นทางที่แตกต่างกันอย่างสมบูรณ์ดังนั้นจึงไม่น่าแปลกใจที่บางครั้งผลลัพธ์ที่แตกต่างกันโดยเฉพาะอย่างยิ่งเมื่อชื่อที่จะแก้ไขไม่ใช่ FQDN (ดังนั้นคำแนะนำให้ใช้ FQDN ทุกที่)

คุณไม่ได้พูดถึงอะไรเกี่ยวกับระบบปฏิบัติการของคุณและการกำหนดค่าระบบของคุณดังนั้นฉันต้องรักษามันให้เป็นเรื่องปกติด้วยการสังเกตการณ์บน Linux: รายละเอียดของ MacOS นั้นแตกต่างกันบ้างและ Windows ก็มากขึ้น แต่แนวคิดทั่วไปเหมือนกัน

  • hostเคียวรี DNS ดังนั้นโดยทั่วไปแล้วจะมีลักษณะ/etc/resolv.confและสอบถามเซิร์ฟเวอร์ที่แสดงอยู่อาจติดชื่อโดเมนหากชื่อโฮสต์ยังไม่ผ่านการรับรองโดยสมบูรณ์ มันจะละเว้นแหล่งที่มาที่เป็นไปได้อื่น ๆ แต่ระวังว่าในวันนี้ระบบจำนวนมากเรียกใช้แคช DNS เซิร์ฟเวอร์ (ปกติdnsmasq) ซึ่งอ่าน/etc/hostsและแหล่งข้อมูลอื่น ๆ ก่อนที่จะทำการสอบถามเซิร์ฟเวอร์ DNS อื่น ๆ ดังนั้นหากhostเคียวรีเซิร์ฟเวอร์ท้องถิ่น/etc/hostsนั้น

  • sshติดตามเส้นทางของตัวเอง ฉันจะอธิบายสิ่งที่opensshอยู่ภายใต้ Linux, การใช้งานอื่น ๆ ครั้งแรกมันจะมองหาชื่อเล่นโฮสต์ที่กำหนดไว้ใน config ไฟล์ (ทั้งระบบ/etc/ssh/ssh_configและต่อผู้ใช้~/.ssh/config) จากนั้นจะค้นหาแหล่งข้อมูลอื่น ๆ ในการสั่งซื้อที่ระบุโดยคำสั่งในhosts: /etc/nsswitch.confบอกว่ามันเป็นสิ่งที่ชอบ:

    hosts: files dns
    

    หมายความว่า: ค้นหา/etc/hostsและจากนั้นสอบถาม DNS ( /etc/resolv.confอีกครั้ง) แหล่งที่เป็นไปได้อื่น ๆ คือล้าสมัยnisและnetinfoบริการ LDAP ไดเรกทอรีที่ใช้งานอยู่คุณตั้งชื่อพวกเขา

ในการแก้ปัญหากรณีเฉพาะของคุณคุณควรปฏิบัติตามเส้นทางในการนำไปใช้ของคุณในการsshติดตามและค้นหาตำแหน่งที่ติด


6
ltrace / strace สามารถให้คำแนะนำแก่คุณเกี่ยวกับวิธีที่ ssh พยายามแก้ไขโดเมน ... และสิ่งที่ใกล้เคียงกับระบบปฏิบัติการมากที่สุดเครื่องมือบรรทัดคำสั่ง dns น่าจะทำให้เป็นจริง
rackandboneman

คำแนะนำของคุณเกี่ยว/etc/nsswitch.confกับการเปลี่ยนการอ่านhosts: files dnsให้เหมาะกับฉัน ในฐานะที่เป็นบันทึกย่อที่น่าสนใจฉันได้ตั้งค่า Raspberry Pis กับ Raspian Jessie หลายครั้งในช่วงไม่กี่สัปดาห์ที่ผ่านมาและพวกเขาต้องการการเปลี่ยนแปลงนี้ทั้งหมด
Patrick Tucci
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.