Próbuję połączyć się z systemem 10.04 z systemem 12.04 za pośrednictwem SSH. O dziwo, zasady resolv.conf
wydają 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.tld
jest w search
linii /etc/resolv.conf
i używanie host
nazwy jest właściwie wyszukiwane, biorąc pod uwagę te reguły. Jednak w przypadku klienta SSH ssh
otrzymuję błąd odtworzony powyżej. Jak to może być? Zawsze miałem wrażenie, że zasady rozpoznawania nazw obowiązują w resolv.conf
całym systemie.
Uwaga: w /etc/hosts
ogóle nie podaje nazwy pangolin
. Pakiet openssh-server
jest 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/interfaces
który jest źródłem 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.
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
źródło
/etc/resolv.conf
i wyjście tego poleceniagrep host /etc/nsswitch.conf
?mtr pangolin
?Odpowiedzi:
Podczas gdy
ssh
inne programy, takie jakping
resolver glibc, szukają nazwy hosta (w tym przypadku „pangolin”),host
sprawdzają 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ć
dns
późniejfiles
, nie mogę wyjaśnić, dlaczego resolver zawiedzie tam, gdzie sięhost
powiedzie.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.
źródło
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 zany
nainet
.źródło
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.
źródło
search
Wiersz 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ę, żehost
narzędzie nie ma takich ograniczeń i żehost
udało się rozwiązać nazwę z siódmym lub późniejszym rozszerzeniem nazwy domeny.dns-search
linii idns-domain
linii w pojedynczej zwrotce w / etc / network / interfaces.dns-domain
Opcja jest faktycznie przestarzałe; wszystkie wyszukiwane nazwy domen powinny znajdować się wdns-search
wierszu.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.
źródło
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.conf
byłomdns
opróczfiles
idns
. Usunięciemdns4
rozwiązało ten problem dla mnie.źródło
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)
źródło