host è in grado di risolvere un nome host, ssh no


14

Sto cercando di connettermi da un sistema 10.04 a un sistema 12.04 tramite SSH. Stranamente le regole resolv.confsembrano avere effetto solo in modo selettivo, il che mi lascia perplesso. Osservare:

[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è in searchlinea /etc/resolv.confe l'utilizzo hostdel nome è cercato correttamente date queste regole. Tuttavia, con il client SSH sshricevo l'errore riprodotto sopra. Come può essere? Ho sempre avuto l'impressione che le regole di risoluzione dei nomi si resolv.confapplichino a system-global.

Nota: /etc/hostsnon dichiara affatto il nome pangolin. Il pacchetto openssh-serverè configurato sul computer di destinazione. La domanda è puramente perché la risoluzione dei nomi non è coerente tra questi due programmi.

Un'altra nota: il comando funziona benissimo quando inserisco il nome di dominio completo, vale a dire pangolin.subdomain.domain.tld.

Nel frattempo ho riavviato il computer client (10.04) e il problema persiste. Un demone di cache DNS non è installato, quindi credo che non avrebbe dovuto essere comunque un problema.


Le informazioni richieste nel commento:

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

/etc/resolv.conf, Ho trasformato i nomi di dominio in modo coerente:

# 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

... e il pieno /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

... e /etc/network/interfaces, che è la fonte per resolv.confin 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.

Nota: la trasformazione dei nomi di dominio è stata eseguita con sed, quindi è coerente tra i vari file riprodotti.


Non c'è ~/.ssh/config, ma ecco quello globale ( /etc/ssh/ssh_config), ridotto per brevità:

$ 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
Potresti pubblicare il tuo /etc/resolv.confe l'output di questo comando grep host /etc/nsswitch.conf?
Awi,

@Awi: aggiunto, più un po 'di più.
0xC0000022L

Due domande 1) Funziona come previsto se si utilizza fqdn? 2) Puoi pubblicare i contenuti di ~ / .ssh / config e / etc / ssh / ssh_config per vedere se c'è qualche stranezza.
Patrick Regan,

@PatrickRegan: modificherò le cose richieste nella domanda. Sì, funziona con il comando fqdn :) ... (regolerà anche la domanda al riguardo)
0xC0000022L

@STATUS_ACCESS_DENIED: vedi qualcosa di strano mtr pangolin?
Plnnk,

Risposte:


12

Considerando sshche altri programmi come pingusare il risolutore glibc per cercare il nome host ('pangolin' in questo caso), hostcerca direttamente il nome nel DNS, bypassando il risolutore glibc. Questa è la differenza

Tuttavia, dato che il glibc resolver è, sulla vostra macchina, configurata per provare dnsdopo files, non riesco a spiegare perché il risolutore fallisce in cui hostriesce.

Ho visto questo comportamento segnalato in precedenza quando dnsmasq è stato utilizzato come nameserver di inoltro locale (https://bugs.launchpad.net/ubuntu/+source/dnsmasq/+bug/998712) ma non stai usando un tale nameserver locale; ma forse il problema lì e qui non era in dnsmasq ma nel risolutore glibc.


Risposta profonda e concisa. Ben fatto! Grazie.
0xC0000022L

9

Il tuo ssh potrebbe tentare di risolvere IP6 e timeout farlo. Se non si utilizza IP6, provare a disabilitare IP6 /etc/ssh/ssh_configmodificando AddressFamily da anya inet.


Questo ha funzionato per me, grazie! Non l'ho notato prima perché tutti gli altri server ho già provato a connettermi a ipv6 supportato.
mniess

3

L'ho incontrato un paio di volte e mi lancia sempre finché non ricordo la restrizione dei sei domini nell'elenco di ricerca in resolv.conf.


1. Questo è un ottimo punto. Il testo della domanda include un elenco del file resolv.conf (anche se sembra essere stato modificato per rendere anonime le informazioni). La searchriga del file contiene più di sei nomi di dominio. Il risolutore glibc esamina solo i primi sei domini o 256 caratteri, a seconda di quale dei due è inferiore. Immagino che l' hostutilità non abbia tale limitazione e che hostriesca a risolvere il nome con l'estensione del nome di dominio settima o successiva.
jdthood,

Nota anche che non ci dovrebbero essere sia una dns-searchlinea che una dns-domainlinea in una singola stanza in / etc / network / interfaces. L' dns-domainopzione è in realtà obsoleta; tutti i nomi di dominio di ricerca devono essere indicati sulla dns-searchlinea.
jdthood,

3

ho ricevuto questo errore mettendo per caso una linea di accesso al dominio prima delle 2 righe del nameserver. nslookup ha funzionato. wget ha funzionato. ssh, scp, rsync non sono riusciti.

lo spostamento del dominio al di sotto dei nameserver e il salvataggio di resolv.conf sono stati corretti. nient'altro era necessario per me.


3

So che questa è una domanda antica, ma aggiungerò cosa ha funzionato per me.

Ho avuto lo stesso problema e ho scoperto che nel mio nsswitch.confc'erano mdnsoltre a filese dns. La rimozione ha mdns4risolto questo problema per me.


ha funzionato anche per me - Ubuntu 16.04
Buddy Palumbo,

-1

Ho riscontrato problemi durante l'accesso al mio server SFTP. L'utente ftp non è stato in grado di accedere a sftp da un altro server. (Solaris - Openssh). Ho commentato la voce "dns" in nsswitch.conf e il problema è stato risolto.

Grazie Arun Janardhanan (IBS Software Services)

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.