host jest w stanie rozwiązać nazwę hosta, ssh nie

14

Próbuję połączyć się z systemem 10.04 z systemem 12.04 za pośrednictwem SSH. O dziwo, zasady resolv.confwydają się działać tylko selektywnie, co mnie dziwi. Przestrzegać:

[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.tldjest w searchlinii /etc/resolv.confi używanie hostnazwy jest właściwie wyszukiwane, biorąc pod uwagę te reguły. Jednak w przypadku klienta SSH sshotrzymuję błąd odtworzony powyżej. Jak to może być? Zawsze miałem wrażenie, że zasady rozpoznawania nazw obowiązują w resolv.confcałym systemie.

Uwaga: w /etc/hostsogóle nie podaje nazwy pangolin. Pakiet openssh-serverjest skonfigurowany na komputerze docelowym. Pytanie dotyczy wyłącznie tego, dlaczego rozpoznawanie nazw nie jest spójne między tymi dwoma programami.

Inna uwaga: polecenie działa poprawnie, gdy wprowadzę pełną nazwę domeny, tj pangolin.subdomain.domain.tld.

W międzyczasie ponownie uruchomiłem komputer kliencki (10.04) i problem nadal występuje. Demon buforowania DNS nie jest zainstalowany, więc uważam, że i tak nie powinno to stanowić problemu.


Informacje wymagane w komentarzu:

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

/etc/resolv.conf, Konsekwentnie przekształcałem nazwy domen:

# 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

... i pełne /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

... i /etc/network/interfacesktóry jest źródłem resolv.conf12.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.

Uwaga: transformacja nazw domen została wykonana sed, więc jest spójna między różnymi odtwarzanymi plikami.


Nie ma ~/.ssh/config, ale oto globalny ( /etc/ssh/ssh_config), skurczony ze względu na zwięzłość:

$ 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
źródło
1
Czy możesz opublikować swoje /etc/resolv.confi wyjście tego polecenia grep host /etc/nsswitch.conf?
Awi,
@Awi: dodał to i jeszcze więcej.
0xC0000022L
Dwa pytania 1) Czy to działa zgodnie z przeznaczeniem, jeśli używasz fqdn? 2) Czy możesz opublikować zawartość ~ / .ssh / config i / etc / ssh / ssh_config, aby sprawdzić, czy jest jakaś dziwność.
Patrick Regan,
@PatrickRegan: Zmienię żądane elementy w pytaniu. Tak, działa z fqdn :) ... (dostosuje również pytanie w tym zakresie)
0xC0000022L
@STATUS_ACCESS_DENIED: Czy widzisz coś dziwnego mtr pangolin?
pl1nk

Odpowiedzi:

12

Podczas gdy sshinne programy, takie jak pingresolver glibc, szukają nazwy hosta (w tym przypadku „pangolin”), hostsprawdzają nazwę bezpośrednio w DNS, omijając resolvera glibc. To jest różnica.

Jednak biorąc pod uwagę, że resolver glibc jest skonfigurowany na twoim komputerze, aby spróbować dnspóźniej files, nie mogę wyjaśnić, dlaczego resolver zawiedzie tam, gdzie się hostpowiedzie.

Widziałem to zachowanie zgłaszane wcześniej, gdy dnsmasq był używany jako lokalny serwer nazw przekazywania (https://bugs.launchpad.net/ubuntu/+source/dnsmasq/+bug/998712), ale nie używasz takiego lokalnego serwera nazw; ale być może problemem tutaj i tutaj nie był dnsmasq, ale program rozpoznawania nazw glibc.

jdthood
źródło
Głęboka i zwięzła odpowiedź. Tak trzymać! Dzięki.
0xC0000022L
9

Twój ssh może próbować rozwiązać IP6 i przekroczyć limit czasu. Jeśli nie używasz IP6, spróbuj wyłączyć IP6 /etc/ssh/ssh_config, zmieniając AddressFamily z anyna inet.

Arnaud Kleinveld
źródło
To zadziałało dla mnie, dzięki! Nie zauważyłem wcześniej, ponieważ wszystkie inne serwery, które próbowałem już połączyć z obsługiwanym IPv6.
mniess
3

Spotkałem się z tym kilka razy i zawsze mnie to rzuca, dopóki nie zapamiętam ograniczenia sześciu domen na liście wyszukiwania w resolv.conf.

golights
źródło
1. To bardzo dobra uwaga. Tekst pytania zawiera listę pliku resolv.conf (chociaż wydaje się, że został zmodyfikowany w celu anonimizacji informacji). searchWiersz pliku zawiera ponad sześć nazw domen. Program rozpoznawania nazw glibc patrzy tylko na pierwsze sześć domen lub 256 znaków, zależnie od tego, co jest mniejsze. Spekuluję, że hostnarzędzie nie ma takich ograniczeń i że hostudało się rozwiązać nazwę z siódmym lub późniejszym rozszerzeniem nazwy domeny.
jdthood
Zauważ też, że nie powinno być dns-searchlinii i dns-domainlinii w pojedynczej zwrotce w / etc / network / interfaces. dns-domainOpcja jest faktycznie przestarzałe; wszystkie wyszukiwane nazwy domen powinny znajdować się w dns-searchwierszu.
jdthood
3

dostałem ten błąd, wstawiając przypadkowo wiersz wprowadzania domeny przed 2 wierszami serwera nazw. nslookup działał. wget działał. ssh, scp, rsync nie powiodło się.

naprawiono przenoszenie domeny do serwerów nazw poniżej i zapisywanie resolv.conf. nic więcej nie było mi potrzebne.

Louy
źródło
3

Wiem, że to starożytne pytanie, ale dodam to, co dla mnie zadziałało.

Miałem ten sam problem i stwierdziłem, że u mnie nsswitch.confbyło mdnsoprócz filesi dns. Usunięcie mdns4rozwiązało ten problem dla mnie.

J Hart
źródło
też dla mnie pracował - ubuntu 16.04
Buddy Palumbo
-1

Miałem problemy z dostępem do mojego serwera sftp. Użytkownik ftp nie mógł zalogować się do sftp z innego serwera. (Solaris - Openssh). Skomentowałem wpis „dns” w pliku nsswitch.conf i problem został rozwiązany.

Dzięki Arun Janardhanan (IBS Software Services)

Bieg
źródło