host dapat menyelesaikan nama host, ssh tidak

14

Saya mencoba untuk terhubung dari sistem 10,04 ke sistem 12,04 melalui SSH. Anehnya aturan-aturan itu resolv.conftampaknya hanya berlaku selektif, yang membuat saya bingung. Mengamati:

[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.tldada di searchbaris /etc/resolv.confdan menggunakan hostnama dicari dengan benar mengingat aturan-aturan tersebut. Namun, dengan klien SSH sshsaya menerima kesalahan yang direproduksi di atas. Bagaimana ini bisa terjadi? Saya selalu terkesan bahwa aturan resolusi nama dalam resolv.confmenerapkan sistem-global.

Catatan: /etc/hoststidak menyatakan nama pangolinsama sekali. Paket openssh-serverini dikonfigurasi pada mesin target. Pertanyaannya murni tentang mengapa resolusi nama tidak konsisten antara kedua program tersebut.

Catatan lain: perintah berfungsi dengan baik ketika saya memasukkan nama domain yang sepenuhnya memenuhi syarat, yaitu pangolin.subdomain.domain.tld.

Sementara itu saya reboot mesin klien (10,04) dan masalahnya masih ada. Daemon caching DNS tidak diinstal, jadi saya rasa itu seharusnya tidak menjadi masalah.


Informasi yang diminta dalam komentar:

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

/etc/resolv.conf, Saya mengubah nama domain secara konsisten:

# 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

... dan lengkap /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

... dan /etc/network/interfaces, yang merupakan sumber resolv.confdalam 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.

Catatan: transformasi nama domain telah dilakukan sed, sehingga konsisten antara berbagai file yang direproduksi.


Tidak ada ~/.ssh/config, tapi inilah yang global ( /etc/ssh/ssh_config), menyusut demi singkatnya:

$ 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
0xC0000022L
sumber
1
Bisakah Anda memposting /etc/resolv.confdan output dari perintah ini grep host /etc/nsswitch.conf?
Awi
@Awi: menambahkannya, ditambah sedikit lagi.
0xC0000022L
Dua pertanyaan 1) Apakah berfungsi sebagaimana dimaksud jika Anda menggunakan fqdn? 2) Bisakah Anda memposting konten ~ / .ssh / config dan / etc / ssh / ssh_config untuk melihat apakah ada keanehan.
Patrick Regan
@ Patrickrick Mulai: Saya akan mengedit hal-hal yang diminta ke dalam pertanyaan. Ya, ini bekerja dengan fqdn :) ... (juga akan menyesuaikan pertanyaan dalam hal ini)
0xC0000022L
@STATUS_ACCESS_DENIED: Apakah Anda melihat sesuatu yang aneh mtr pangolin?
pl1nk

Jawaban:

12

Sedangkan sshdan program lain seperti pingmenggunakan glibc resolver untuk mencari nama host ('trenggiling' dalam kasus ini), hostcari nama tersebut di DNS secara langsung, melewati resolver glibc. Itulah bedanya.

Namun, mengingat bahwa glibc resolver adalah, pada mesin Anda, dikonfigurasi untuk mencoba dnssetelah files, saya tidak bisa menjelaskan mengapa resolver gagal di mana hostberhasil.

Saya telah melihat perilaku ini dilaporkan sebelumnya ketika dnsmasq digunakan sebagai nameserver penerusan lokal (https://bugs.launchpad.net/ubuntu/+source/dnsmasq/+bug/998712) tetapi Anda tidak menggunakan nameserver lokal tersebut; tapi mungkin masalahnya di sana dan di sini bukan di dnsmasq tetapi di resolib glibc.

jdthood
sumber
Jawaban yang mendalam dan ringkas. Jalan untuk pergi! Terima kasih.
0xC0000022L
9

Ssh Anda mungkin mencoba menyelesaikan IP6 dan menghabiskan waktu melakukan hal ini. Jika Anda tidak menggunakan IP6, coba nonaktifkan IP6 /etc/ssh/ssh_configdengan mengubah AddressFamily dari anymenjadi inet.

Arnaud Kleinveld
sumber
Ini berhasil untuk saya, terima kasih! Saya tidak memperhatikan sebelumnya karena semua server lain yang saya coba sambungkan ke IPv6 yang didukung sudah.
mniess
3

Saya telah menemukan ini beberapa kali, dan itu selalu membuat saya sampai saya ingat batasan enam domain pada daftar pencarian di resolv.conf.

golights
sumber
1. Ini adalah poin yang sangat bagus. Teks pertanyaan termasuk daftar file resolv.conf (meskipun tampaknya telah diedit untuk menganonimkan informasi). Baris file searchberisi lebih dari enam nama domain. Penyelesai glibc hanya melihat pada enam domain pertama atau 256 karakter, mana yang kurang. Saya berspekulasi bahwa hostutilitas tidak memiliki batasan seperti itu, dan yang hostberhasil menyelesaikan nama dengan perpanjangan nama domain ketujuh atau lebih baru.
jdthood
Perhatikan juga bahwa seharusnya tidak ada satu dns-searchbaris dan satu dns-domainbaris pun dalam bait tunggal di / etc / network / interfaces. The dns-domainopsi sebenarnya ditinggalkan; semua nama domain pencarian harus diberikan di dns-searchtelepon.
jdthood
3

saya mendapatkan kesalahan ini dengan meletakkan baris entri domain sebelum 2 server nameserver secara tidak sengaja. nslookup bekerja. kami akan bekerja. ssh, scp, rsync gagal.

memindahkan domain ke nameserver di bawah ini dan menyimpan resolv.conf diperbaiki. tidak ada yang perlu bagi saya.

Louy
sumber
3

Saya tahu bahwa ini adalah pertanyaan kuno, tetapi saya akan menambahkan apa yang berhasil untuk saya.

Saya memiliki masalah yang sama dan menemukan bahwa di saya nsswitch.conf, ada mdnstambahan filesdan dns. Menghapus mdns4masalah ini diselesaikan untuk saya.

J Hart
sumber
bekerja untuk saya juga - ubuntu 16.04
Buddy Palumbo
-1

Saya menghadapi masalah saat mengakses server sftp saya. Pengguna ftp tidak dapat masuk ke sftp dari server lain. (Solaris - Openssh). Saya berkomentar entri "dns" di nsswitch.conf dan masalah terselesaikan.

Terima kasih Arun Janardhanan (Layanan Perangkat Lunak IBS)

Arun
sumber