¿Cómo puede ser que ssh somename funcione, mientras que nslookup somename no?

16

¿Cómo saber la dirección IP de algún host somenameque pueda ssh? Si lo hago nslookupen este host, dice "sin respuesta". ¿Cómo puede sshresolver su nombre entonces?


Ni /etc/hoststampoco .ssh/configexplicación trabajó.


EDITAR

Lo siento somenameestá totalmente calificado.

ssh somename.somedomain

funciona, mientras

ping somename.somedomain

y

nslookup somename.somedomain

no lo hagas

Dims
fuente
12
¿Está listado en /etc/hostso ~/.ssh/config?
Stephen Kitt,
1
El nombre también podría resolverse usando mDNS (DNS de multidifusión) o LLMNR (Resolución de nombre de multidifusión de enlace local).
Johan Myréen
Puede tener una entrada en su archivo .ssh / config
Tagwint
1
@Dims Puede intentar hacer ping somename.local. .locales un dominio especial reservado para mDNS. Para LLMNR, podría usar este script NMAP.
Johan Myréen
2
@mckenzm no, no lo hará.
Stephen Kitt

Respuestas:

31

Nslookup es un programa para consultar servidores de nombres de dominio de Internet . Nslookup es muy bueno para consultar servidores DNS, pero no le da la imagen completa cuando se trata de la resolución de nombres.

En Linux resolución de nombres se controla con mayor frecuencia por NSS , que está configurado por /etc/nsswitch.conf. Específicamente, esta configuración contiene una hostsentrada. Por ejemplo:

hosts:          files dns

En la entrada anterior puede ver que lo primero que debe consultarse es filesseguido dns, lo que significa que /etc/hostsse consultará antes de DNS. Existen otras opciones que incluyen LDAP , DNS de multidifusión y WINS .

Respondiendo su pregunta directamente, SSH resuelve el nombre de host a una dirección IP usando NSS (obteniendo resultados de múltiples fuentes) donde nslookup solo consulta el DNS.

Puede verificar para ver qué IP NSS resuelve un nombre de host para usar getent. Por ejemplo para resolver somename:

getent hosts somename

Además, en el caso de SSH, puede configurar información específica del host en /etc/ssh/ssh_configy ~/.ssh/config. Esto incluso le permitirá especificar una dirección IP para un nombre de host, omitiendo por completo la resolución de nombre .:

Lo siguiente le dice a SSH que use 192.168.1.25para ambos devy dev.example.com. SSH usará esta dirección independientemente de si estos nombres existen o no como nombres DNS para una IP diferente:

# contents of $HOME/.ssh/config
Host dev dev.example.com
    HostName 192.168.1.25
Philip Couling
fuente
10

¿Cómo saber la dirección IP de algún host somenameque pueda ssh?

Use la bandera detallada ( -v) del sshcomando:

ssh somename -v

El resultado debe contener, entre otras cosas, una línea que muestre la IP resuelta del servidor al que se está conectando:

debug1: Connecting to aur.archlinux.org [5.9.250.164] port 22.

Si hago nslookup en este host, dice "sin respuesta". ¿Cómo puede sshresolver su nombre entonces?

La causa más probable de sshpoder resolver un nombre de host que nslookupno puede es que esté configurado en el sshnivel.

Según la ssh_config(5)página del manual , hay tres lugares donde se sshbuscan los archivos de configuración:

  1. opciones de línea de comandos
  2. archivo de configuración del usuario (~ / .ssh / config)
  3. archivo de configuración de todo el sistema (/ etc / ssh / ssh_config)

Uno de estos archivos puede contener su nombre de host somename(o un patrón que coincida) como un alias de otro nombre de host o IP. Por ejemplo:

# explicit alias of somename to 8.8.8.8 IP
Host somename
    HostName 8.8.8.8

# pattern alias (that obviously matches somename) to another hostname
# that is itself resolved via DNS (and that can be nslookup-ed).
Host *
    HostName anotherhostname

Consulte las ssh_config(5)explicaciones Hosty HostNamedirectivas de la página del manual y la PATTERNSsección para obtener más información.

Jules Lamur
fuente
Esta respuesta no responde la pregunta, que era cómo se reconoce un nombre de host, incluso si no es un servidor de un servidor DNS.
Johan Myréen
1
La respuesta menciona correctamente un escenario muy probable en el que ssh user@someserverparece "resolver" el someservernombre DNS (incluso si esto no sucede realmente). Si Host someserverestá configurado en el .ssh/configarchivo, entonces es posible usar el comando ssh exactamente como lo indica OP incluso si someserverno está en el DNS en absoluto.
Fiisch
2
@ JohanMyréen La salida de ssh -v somenameincluye la dirección IP (independientemente de cualquier ssh_configentrada). Por lo tanto, responde directamente a la pregunta "¿Cómo saber la dirección IP de algún nombre de host con el que puedo hacer ssh?", Además de ser un buen primer paso para responder "¿Cómo puede ser que ese nombre de ssh funcione ...?".
JigglyNaga
4

Philip está casi allí, pero se dirige por la .ssh/configrathole, que es poco probable que haya configurado.

Los comandos ...

getent hosts somename

... consulta NSS utilizando la hosts:línea de búsqueda, en /etc/nsswitch.conflugar de solo DNS como lo nslookuphace. Es probable que su entorno Unix esté utilizando más de un servicio de nombres; posiblemente algún tipo de integración AD.

Rico
fuente
3
No diría que me fui por esa ruta. Agregué un "también" para completar.
Philip Couling
@PhilipCouling Claro, pero su "pre-también" está incompleto: no está mostrando cómo resolver arbitrariamente un nombre cuando la pregunta es sobre "$ thing versus nsloookup".
Rico
3
Como ya se comentó en la Q, hostnormalmente es parte de bind-utils (o equivalente) y les gusta a ambos nslookupy digsolo usa DNS. OTOH getent hosts(o posiblemente ahosts) hace lo que usted describe.
dave_thompson_085
@ dave_thompson_085 Incorrecto. hostconsulta otros servicios de nombres. Convino en que getent hostses el mejor método inequívoco para consultar "cualquier servicio de nombres configurado".
Rico
1
hostes solo DNS según las páginas de manual y se confirma mediante pruebas en los sistemas que uso (CentOS, Ubuntu, FreeBSD, Solaris), así como en sentido ascendente . También vea los engaños (cercanos) que comenté en la Q que también dicen esto.
dave_thompson_085