somename นั้นสามารถทำงานได้อย่างไรในขณะที่ somename ssname ไม่ทำงาน


16

จะทราบที่อยู่ IP ของโฮสต์ที่somenameฉันสามารถทำได้sshอย่างไร ถ้าฉันทำnslookupกับโฮสต์นี้มันบอกว่า "ไม่มีคำตอบ" จะsshแก้ไขชื่อได้อย่างไร?


ทั้ง/etc/hostsมิได้.ssh/configคำอธิบายที่ทำงาน


แก้ไข

ขออภัยsomenameมีคุณสมบัติครบถ้วน

ssh somename.somedomain

ทำงานได้ในขณะที่

ping somename.somedomain

และ

nslookup somename.somedomain

อย่า


12
มันอยู่ในรายการ/etc/hostsหรือ~/.ssh/configไม่?
Stephen Kitt

1
ชื่อสามารถแก้ไขได้โดยใช้ mDNS (Multicast DNS) หรือ LLMNR (การแก้ปัญหาชื่อมัลติคาสต์ Link-Local)
Johan Myréen

มันอาจมีรายการในไฟล์. ssh / config ของคุณ
Tagwint

1
@Dims คุณสามารถลองส่ง Ping somename.localได้ .localเป็นโดเมนพิเศษที่สงวนไว้สำหรับ mDNS สำหรับ LLMNR คุณสามารถใช้นี้สคริปต์ NMAP
Johan Myréen

2
@mckenzm ไม่มันจะไม่
Stephen Kitt

คำตอบ:


31

Nslookup เป็นโปรแกรมไปยังเซิร์ฟเวอร์ชื่อโดเมนแบบสอบถามอินเทอร์เน็ต Nslookup นั้นดีมากสำหรับการสอบถามเซิร์ฟเวอร์ DNS แต่ไม่ได้ให้ภาพรวมทั้งหมดเมื่อได้รับการจำแนกชื่อ

เกี่ยวกับการแก้ปัญหาชื่อลินุกซ์จะถูกควบคุมมากที่สุดโดยเอ็นเอส/etc/nsswitch.confซึ่งจะเป็นผู้กำหนด โดยเฉพาะการกำหนดค่านี้มีhostsรายการ ตัวอย่างเช่น:

hosts:          files dns

ในรายการด้านบนคุณจะเห็นว่าสิ่งแรกที่จะสอบถามfilesตามด้วยdnsความหมายที่/etc/hostsจะถูกสอบถามก่อน DNS ตัวเลือกอื่น ๆ ที่มีอยู่รวมทั้งLDAP , Multicast DNSและWINS

ตอบคำถามของคุณโดยตรง SSH จะแก้ไขชื่อโฮสต์ให้เป็นที่อยู่ IP โดยใช้ NSS (ดึงผลลัพธ์จากหลายแหล่งที่มา) โดยที่ nslookup ทำการสืบค้น DNS เท่านั้น

คุณสามารถตรวจสอบเพื่อดูว่า IP NSS ใดแก้ชื่อโฮสต์ให้ใช้ getent ตัวอย่างเช่นการแก้ไขsomename:

getent hosts somename

นอกจากนี้ ในกรณีของการ SSH ที่คุณสามารถกำหนดค่าข้อมูลเฉพาะโฮสต์ในและ/etc/ssh/ssh_config ~/.ssh/configสิ่งนี้จะช่วยให้คุณระบุที่อยู่ IP สำหรับชื่อโฮสต์โดยข้ามการจำแนกชื่อทั้งหมด:

ต่อไปนี้จะบอก SSH เพื่อการใช้งาน192.168.1.25สำหรับทั้งสองและdev dev.example.comSSH จะใช้ที่อยู่นี้ไม่ว่าชื่อเหล่านี้จะเป็นชื่อ DNS สำหรับ IP อื่นหรือไม่:

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

10

จะทราบที่อยู่ IP ของโฮสต์ที่somenameฉันสามารถทำได้sshอย่างไร

ใช้การตั้งค่าสถานะ verbose ( -v) ของsshคำสั่ง:

ssh somename -v

เอาต์พุตควรมีบรรทัดที่แสดง IP ที่ได้รับการแก้ไขของเซิร์ฟเวอร์ที่คุณกำลังเชื่อมต่อด้วย:

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(หรือรูปแบบที่ตรงกับมัน) เป็นชื่อแทนของชื่อโฮสต์หรือ IP อื่น ตัวอย่างเช่น:

# 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และHostNameคำแนะนำของหน้าคู่มือและPATTERNSส่วนสำหรับข้อมูลเพิ่มเติม


คำตอบนี้ไม่ตอบคำถามซึ่งเป็นวิธีที่รู้จักชื่อโฮสต์แม้ว่าจะไม่ใช่เซิร์ฟเวอร์โดยเซิร์ฟเวอร์ DNS
Johan Myréen

1
คำตอบที่ถูกต้องกล่าวถึงสถานการณ์ที่น่าจะเป็นไปได้มากซึ่งssh user@someserverดูเหมือนจะ "แก้ไข" someserverชื่อ DNS (แม้ว่าจะไม่เกิดขึ้นจริง) หากHost someserverมีการกำหนดค่าใน.ssh/configไฟล์เป็นไปได้ที่จะใช้คำสั่ง ssh เหมือนกับสถานะ OP แม้ว่าsomeserverจะไม่ได้อยู่ใน DNS เลย
Fiisch

2
@ JohanMyréenผลลัพธ์จากการssh -v somenameรวมที่อยู่ IP (โดยไม่คำนึงถึงssh_configรายการใด ๆ) ดังนั้นมันจึงตอบคำถามโดยตรงว่า "จะรู้ที่อยู่ IP ของ somename โฮสต์บางตัวที่ฉันสามารถ ssh ได้อย่างไร" เช่นเดียวกับขั้นตอนแรกที่ดีในการตอบ
JigglyNaga

4

ฟิลิปเกือบจะอยู่ที่นั่นแล้ว แต่มุ่งหน้าไปตามทาง.ssh/configที่ไม่น่าจะเป็นไปได้ที่คุณจะกำหนดค่า

คำสั่ง ...

getent hosts somename

... สอบถาม NSS โดยใช้hosts:สายการค้นหาใน/etc/nsswitch.confมากกว่าแค่ DNS ตามnslookupไม่ เป็นไปได้ว่าสภาพแวดล้อม Unix ของคุณกำลังใช้บริการการตั้งชื่อมากกว่าหนึ่งรายการ อาจรวมการโฆษณาบางประเภท


3
ฉันจะไม่พูดว่าฉันมุ่งหน้าไปตามเส้นทางนั้น ฉันเพิ่ม "ยัง" เพื่อความสมบูรณ์
Philip Couling

@PhilipCouling แน่นอน แต่ "pre-also" ของคุณยังไม่สมบูรณ์ - คุณไม่ได้แสดงวิธีแก้ไขชื่อโดยพลการเมื่อคำถามนั้นเกี่ยวกับ "$ Things กับ nsloookup"
รวย

3
ตามที่แสดงความคิดเห็นแล้วใน Q แล้วhostโดยปกติจะเป็นส่วนหนึ่งของ bind-utils (หรือเทียบเท่า) และชอบทั้งคู่nslookupและdigใช้ DNS เท่านั้น OTOH getent hosts(หรืออาจahosts) ทำสิ่งที่คุณอธิบาย
dave_thompson_085

@ dave_thompson_085 ไม่ถูกต้อง hostสอบถามบริการชื่ออื่น ๆ ยอมรับว่าgetent hostsเป็นวิธีที่ดีที่สุดในการสืบค้น "บริการชื่อที่กำหนดค่าใด ๆ " ที่ดีที่สุด
Rich

1
hostเป็น DNS เพียงอย่างเดียวต่อหน้าคนและได้รับการยืนยันโดยการทดสอบในระบบที่ผมใช้ (CentOS, Ubuntu, FreeBSD, Solaris) เช่นเดียวกับต้นน้ำ ดูความเห็นที่ใกล้เคียงที่ฉันแสดงความคิดเห็นใน Q ซึ่งพูดเช่นนี้ด้วย
dave_thompson_085
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.