el host puede resolver un nombre de host, ssh no

14

Estoy tratando de conectarme desde un sistema 10.04 a un sistema 12.04 a través de SSH. Por extraño que parezca, las reglas resolv.confparecen tener efecto solo selectivamente, lo que me deja perplejo. Observar:

[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.tldestá en la searchlínea /etc/resolv.confy el uso hostdel nombre se busca correctamente dadas esas reglas. Sin embargo, con el cliente SSH sshrecibo el error reproducido anteriormente. ¿Cómo puede ser esto? Siempre tuve la impresión de que las reglas de resolución de nombres se aplican en el resolv.confsistema global.

Nota: /etc/hostsno declara el nombre pangolinen absoluto. El paquete openssh-serverestá configurado en la máquina de destino. La pregunta es puramente por qué la resolución de nombres no es consistente entre esos dos programas.

Otra nota: el comando funciona bien cuando ingreso el nombre de dominio completo, es decir pangolin.subdomain.domain.tld.

Mientras tanto, reinicié la máquina del cliente (10.04) y el problema aún existe. No está instalado un demonio de almacenamiento en caché de DNS, por lo que creo que de todos modos no debería haber sido un problema.


La información solicitada en el comentario:

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

/etc/resolv.conf, Transformé los nombres de dominio consistentemente:

# 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

... y el completo /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

... y /etc/network/interfaces, que es la fuente resolv.confen 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: se realizó la transformación de los nombres de dominio sed, por lo que es coherente entre los distintos archivos reproducidos.


No existe ~/.ssh/config, pero aquí está el global ( /etc/ssh/ssh_config), reducido por razones de brevedad:

$ 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
fuente
1
¿Podría publicar su /etc/resolv.confy la salida de este comando grep host /etc/nsswitch.conf?
Awi
@Awi: lo agregó, y un poco más.
0xC0000022L
Dos preguntas 1) ¿Funciona según lo previsto si usa el fqdn? 2) ¿Puede publicar el contenido de ~ / .ssh / config y / etc / ssh / ssh_config para ver si hay alguna rareza?
Patrick Regan
@PatrickRegan: editaré las cosas solicitadas en la pregunta. Sí, funciona con el fqdn :) ... (también ajustará la pregunta al respecto)
0xC0000022L
@STATUS_ACCESS_DENIED: ¿Ves algo extraño mtr pangolin?
pl1nk

Respuestas:

12

Mientras que sshotros programas, como pingel resolver glibc para buscar el nombre de host ('pangolin' en este caso), hostbusca el nombre directamente en DNS, sin pasar por el resolutor glibc. Esa es la diferencia.

Sin embargo, dado que el resolutor glibc está configurado en su máquina para probar dnsdespués files, no puedo explicar por qué el resolutor falla donde hosttiene éxito.

He visto este comportamiento antes cuando dnsmasq se usaba como servidor de nombres de reenvío local (https://bugs.launchpad.net/ubuntu/+source/dnsmasq/+bug/998712) pero no está usando un servidor de nombres local; pero quizás el problema allí y aquí no estaba en dnsmasq sino en el solucionador glibc.

jdthood
fuente
Respuesta profunda y sucinta. ¡Camino a seguir! Gracias.
0xC0000022L
9

Su ssh puede intentar resolver IP6 y agotar el tiempo haciendo esto. Si no está utilizando IP6, intente deshabilitar IP6 /etc/ssh/ssh_configcambiando AddressFamily de anya inet.

Arnaud Kleinveld
fuente
Esto funcionó para mí, gracias! No me di cuenta antes porque todos los demás servidores que intenté conectarme a ipv6 soportados ya.
mniess
3

Me he encontrado con esto un par de veces, y siempre me arroja hasta que recuerdo la restricción de seis dominios en la lista de búsqueda en resolv.conf.

golights
fuente
1. Este es un muy buen punto. El texto de la pregunta incluye una lista del archivo resolv.conf (aunque parece haber sido editado para anonimizar la información). La searchlínea del archivo contiene más de seis nombres de dominio. El solucionador glibc solo mira los primeros seis dominios o 256 caracteres, lo que sea menor. Especulo que la hostutilidad no tiene esa restricción, y que hostlogra resolver el nombre con la extensión del séptimo o posterior nombre de dominio.
jdthood
Tenga en cuenta también que no debe haber una dns-searchlínea y una dns-domainlínea en una sola sección en / etc / network / interfaces. La dns-domainopción en realidad está en desuso; todos los nombres de dominio de búsqueda deben estar en la dns-searchlínea.
jdthood
3

Obtuve este error al poner una línea de entrada de dominio antes de las 2 líneas del servidor de nombres por accidente. nslookup funcionó. wget trabajado. ssh, scp, rsync falló.

moviendo el dominio a los siguientes servidores de nombres y guardando resolv.conf arreglado. Nada más era necesario para mí.

Louy
fuente
3

Sé que esta es una pregunta antigua, pero agregaré lo que funcionó para mí.

Tuve el mismo problema y descubrí que en mi nsswitch.conf, había mdnsademás de filesy dns. La eliminación mdns4resolvió este problema por mí.

J Hart
fuente
también funcionó para mí - ubuntu 16.04
Buddy Palumbo
-1

Estaba enfrentando problemas para acceder a mi servidor sftp. El usuario ftp no pudo iniciar sesión en sftp desde otro servidor. (Solaris - Openssh). Comenté la entrada "dns" en nsswitch.conf y el problema se resolvió.

Gracias Arun Janardhanan (Servicios de software de IBS)

Arun
fuente