โฮสต์สามารถแก้ไขชื่อโฮสต์ได้ไม่ใช่ ssh


14

ฉันพยายามเชื่อมต่อจากระบบ 10.04 ไปยังระบบ 12.04 ผ่าน SSH กฎที่resolv.confดูเหมือนจะมีผลในการคัดเลือกอย่างแปลกประหลาดซึ่งทำให้ฉันงงงวย สังเกต:

[2] user@mach:~$ ssh pangolin
ssh: Could not resolve hostname pangolin: Name or service not known
[2] user@mach:~$ host pangolin
pangolin.subdomain.domain.tld has address 172.16.7.12

subdomain.domain.tldอยู่ในsearchบรรทัด/etc/resolv.confและใช้hostชื่อค้นหาอย่างถูกต้องให้กฎเหล่านั้น อย่างไรก็ตามด้วยไคลเอนต์ SSH sshฉันได้รับข้อผิดพลาดทำซ้ำข้างต้น สิ่งนี้จะเป็นอย่างไร ฉันมักจะรู้สึกว่ากฎการแก้ไขชื่อในresolv.confระบบทั่วโลกใช้

หมายเหตุ: /etc/hostsไม่ได้ประกาศชื่อpangolinเลย แพ็คเกจopenssh-serverถูกกำหนดค่าบนเครื่องเป้าหมาย คำถามนี้เกี่ยวกับสาเหตุที่การจำแนกชื่อไม่สอดคล้องกันระหว่างโปรแกรมทั้งสอง

ทราบอีก: pangolin.subdomain.domain.tldคำสั่งทำงานได้ดีเมื่อฉันป้อนชื่อโดเมนที่มีคุณสมบัติครบถ้วนคือ

ในขณะเดียวกันฉันรีบูตเครื่องไคลเอนต์ (10.04) และปัญหายังคงมีอยู่ ไม่มีการติดตั้ง daemon แคช DNS ดังนั้นฉันจึงคิดว่าไม่น่าจะมีปัญหาอยู่ดี


ข้อมูลที่ถามในความคิดเห็น:

$ grep host /etc/nsswitch.conf
hosts:          files dns

/etc/resolv.confฉันเปลี่ยนชื่อโดเมนอย่างสม่ำเสมอ:

# Dynamic resolv.conf(5) file for glibc resolver(3) generated by resolvconf(8)
#     DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN
nameserver 172.16.1.1
nameserver 172.16.1.5
search subdomain.domain1.com domain1.com domain2 domain3.com domain2.ccTLD domain3.net dev.domain1.com sdk.dev.domain1.com

... และเต็ม/etc/nsswitch.conf:

$ cat /etc/nsswitch.conf
# /etc/nsswitch.conf
#
# Example configuration of GNU Name Service Switch functionality.
# If you have the `glibc-doc-reference' and `info' packages installed, try:
# `info libc "Name Service Switch"' for information about this file.

passwd:         compat
group:          compat
shadow:         compat

hosts:          files dns
networks:       files

protocols:      db files
services:       db files
ethers:         db files
rpc:            db files

netgroup:       nis

... และ/etc/network/interfacesซึ่งเป็นแหล่งสำหรับresolv.confใน 12.04:

# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).

# The loopback network interface
auto lo
iface lo inet loopback

# The primary network interface
auto eth0
iface eth0 inet static
        address 172.16.1.234
        netmask 255.255.0.0
        gateway 172.16.255.254
        dns-nameservers 172.16.1.1 172.16.1.5
        dns-search domain1.com. domain2. domain3.com. domain2.ccTLD. domain3.net. dev.domain1.com. sdk.dev.domain1.com. subdomain.domain1.com.
        dns-domain subdomain.domain1.com.

หมายเหตุ: การแปลงชื่อโดเมนเสร็จสิ้นsedดังนั้นจึงสอดคล้องกันระหว่างไฟล์ที่ทำซ้ำต่างๆ


ไม่มี~/.ssh/configแต่นี่คือโลกหนึ่ง ( /etc/ssh/ssh_config) ที่ย่อหย่อนเพื่อความกะทัดรัด:

$ grep -v '^#' /etc/ssh/ssh_config |grep -v '^[[:space:]]*$'
Host *
    SendEnv LANG LC_*
    HashKnownHosts yes
    GSSAPIAuthentication yes
    GSSAPIDelegateCredentials no

$ mtr pangolin
Name or service not known: Success

1
คุณสามารถโพสต์/etc/resolv.confและเอาท์พุทของคำสั่งนี้ได้grep host /etc/nsswitch.confไหม?
Awi

@Awi: เพิ่มเข้าไปแล้วบวกอีกเล็กน้อย
0xC0000022L

คำถามสองข้อ 1) มันทำงานตามที่ตั้งใจไว้ถ้าคุณใช้ fqdn หรือไม่? 2) คุณสามารถโพสต์เนื้อหาของ ~ / .ssh / config และ / etc / ssh / ssh_config เพื่อดูว่ามีความแปลกหรือไม่
Patrick Regan

@PatrickRegan: ฉันจะแก้ไขสิ่งที่ขอเป็นคำถาม ใช่มันใช้งานได้กับ fqdn :) ... (จะปรับคำถามด้วยความเคารพเช่นนั้น)
0xC0000022L

@STATUS_ACCESS_DENIED: คุณเห็นอะไรแปลก ๆmtr pangolinไหม?
pl1nk

คำตอบ:


12

ในขณะที่sshและโปรแกรมอื่น ๆ เช่นpingใช้ glibc resolver เพื่อค้นหาชื่อโฮสต์ ('pangolin' ในกรณีนี้) hostค้นหาชื่อใน DNS โดยตรงโดยข้ามตัวแก้ไข glibc นั่นคือความแตกต่าง

อย่างไรก็ตามเนื่องจากตัวกำหนดค่า glibc เป็นตัวกำหนดค่าให้ลองใหม่dnsหลังจากfilesนั้นฉันไม่สามารถอธิบายได้ว่าทำไมตัวแก้ไขปัญหาจึงล้มเหลวเมื่อhostสำเร็จ

ฉันเคยเห็นพฤติกรรมนี้รายงานมาก่อนแล้วเมื่อ dnsmasq ถูกใช้เป็นเนมเซิร์ฟเวอร์การส่งต่อโลคัล (https://bugs.launchpad.net/ubuntu/+source/dnsmasq/+bug/998712) แต่คุณไม่ได้ใช้เนมเซิร์ฟเวอร์ในตัว แต่บางทีปัญหาที่นั่นและที่นี่ไม่ได้อยู่ใน dnsmasq แต่อยู่ในตัวแก้ไข glibc


คำตอบที่ลึกซึ้งและรวบรัด ทางที่จะไป! ขอบคุณ
0xC0000022L

9

ssh ของคุณอาจพยายามแก้ไข IP6 และหมดเวลาในการทำเช่นนี้ หากคุณไม่ได้ใช้ IP6 ลองปิดการใช้งานใน IP6 /etc/ssh/ssh_configโดยการเปลี่ยน AddressFamily จากไปanyinet


มันใช้งานได้สำหรับฉันขอบคุณ! ฉันไม่ได้สังเกตมาก่อนเพราะเซิร์ฟเวอร์อื่น ๆ ทั้งหมดฉันพยายามเชื่อมต่อกับ ipv6 ที่รองรับแล้ว
mniess

3

ฉันเจอสิ่งนี้มาสองสามครั้งและมันจะขว้างฉันจนกว่าฉันจะจำข้อ จำกัด โดเมนหกข้อในรายการค้นหาใน resolv.conf


1. นี่เป็นจุดที่ดีมาก ข้อความคำถามประกอบด้วยรายชื่อของไฟล์ resolv.conf (แม้ว่าจะดูเหมือนว่าได้รับการแก้ไขเพื่อลบข้อมูลนั้น) searchบรรทัดของไฟล์มีชื่อโดเมนมากกว่าหกชื่อ ตัวแก้ไข glibc จะดูเฉพาะหกโดเมนแรกหรือ 256 ตัวอักษรแล้วแต่จำนวนใดจะน้อยกว่า ฉันคาดการณ์ว่าhostยูทิลิตี้ไม่มีข้อ จำกัด ดังกล่าวและhostประสบความสำเร็จในการแก้ไขชื่อด้วยการขยายชื่อโดเมนที่เจ็ดหรือหลังจากนั้น
jdthood

โปรดทราบว่าไม่ควรมีทั้งdns-searchบรรทัดและdns-domainบรรทัดใน stanza เดียวใน / etc / network / interfaces dns-domainตัวเลือกที่จะเลิกจริง; ชื่อโดเมนการค้นหาทั้งหมดควรได้รับในdns-searchบรรทัด
jdthood

3

ฉันได้รับข้อผิดพลาดนี้โดยใส่บรรทัดรายการโดเมนก่อนที่จะถึง 2 nameserver บรรทัดโดยไม่ได้ตั้งใจ nslookup ทำงาน wget ทำงาน ssh, scp, rsync ล้มเหลว

ย้ายโดเมนไปที่ด้านล่างเนมเซิร์ฟเวอร์และบันทึก resolv.conf แล้ว ไม่มีอะไรอื่นที่จำเป็นสำหรับฉัน


3

ฉันรู้ว่านี่เป็นคำถามโบราณ แต่ฉันจะเพิ่มในสิ่งที่ทำงานให้ฉัน

ฉันมีปัญหาเดียวกันและพบว่าในฉันnsswitch.confมีmdnsนอกเหนือไปและfiles dnsการลบmdns4แก้ไขปัญหานี้สำหรับฉัน


ทำงานให้ฉันด้วย - Ubuntu 16.04
Buddy Palumbo

-1

ฉันประสบปัญหาในการเข้าถึงเซิร์ฟเวอร์ SFTP ของฉัน ผู้ใช้ ftp ไม่สามารถเข้าสู่ระบบเพื่อ sftp จากเซิร์ฟเวอร์อื่น (Solaris - Openssh) ฉันแสดงความคิดเห็นในรายการ "dns" ใน nsswitch.conf และปัญหาได้รับการแก้ไข

ขอบคุณ Arun Janardhanan (บริการซอฟต์แวร์ IBS)

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.