¿Por qué SSH no resuelve este nombre de host?

12

Cuando trato de SSH a un host en la red nombrada storage, recibo un error de resolución de DNS:

$ ssh storage
ssh: Could not resolve hostname storage: Name or service not known

Pero cuando consulto DNS con el host, funciona

$ host storage
storage has address 192.168.20.103

¿Cómo es que hostpuede encontrar la IP pero sshno puede?

jldugger
fuente
14
Comience a acostumbrarse a usar FQDN en todas partes. Si este es el primer problema que ha tenido en este sentido, es extraordinariamente afortunado. Puede ser muy difícil de rastrear, y no será la última. Aquí hay una pista: storagees un dominio de nivel superior en vivo en Internet.
Michael Hampton
¿Eres capaz de 'ssh' a 192.168.20.103?
IvanGoneKrazy
2
¿Dónde ha definido el nombre de host 192.168.20.103? / etc / hosts?
Huérfanos
3
Escribir FQDN es un dolor. Aliasing "almacenamiento" a "almacenamiento.midominio.com" en .ssh / config, por otro lado, es realmente útil.
pjc50
1
@ pjc50 escribo stoy luego presiono Tab.
Michael Hampton

Respuestas:

28

sshy hostresolver nombres siguiendo rutas completamente diferentes, por lo que no es sorprendente que a veces den resultados diferentes, especialmente cuando el nombre a resolver no es un FQDN (de ahí la sugerencia de usar FQDN en todas partes).

No mencionas nada sobre tu sistema operativo y la configuración de tu sistema, así que tengo que mantenerlo en general, con un ojo en Linux: los detalles de MacOS son algo diferentes y Windows aún más, pero los conceptos generales son los mismos.

  • hostconsulta DNS, por lo que básicamente busca /etc/resolv.confy consulta los servidores enumerados allí, posiblemente adjuntando un nombre de dominio si el nombre de host aún no está completamente calificado. Ignora todas las demás fuentes posibles, pero tenga en cuenta que en estos días muchos sistemas ejecutan un servidor DNS de almacenamiento en caché local (generalmente dnsmasq) que lee /etc/hostsy otras fuentes antes de consultar otros servidores DNS, por lo que si las hostconsultas a ese servidor local, los resultados /etc/hostspueden arrastrarse.

  • sshsigue su propio camino. Describiré qué opensshhace bajo Linux, otras implementaciones difieren. Primero busca los apodos de host definidos en los archivos de configuración (en todo el sistema /etc/ssh/ssh_configy por usuario ~/.ssh/config), luego busca otras fuentes en el orden especificado por la hosts:directiva /etc/nsswitch.conf. Digamos que es algo como:

    hosts: files dns
    

    Esto significa: buscar /etc/hostsy luego consultar el DNS ( /etc/resolv.confnuevamente). Otras fuentes posibles son los obsoletos nisy los netinfoservicios, LDAP, el directorio activo, los nombras.

Para depurar su caso particular, debe seguir el camino que sshsigue su implementación y averiguar dónde se atasca.

Darío
fuente
66
ltrace / strace puede darle pistas sobre cómo ssh realmente está tratando de resolver el dominio ... y la herramienta dns de línea de comandos más cercana a cómo lo hace, probablemente sea importante.
rackandboneman
Su recomendación de cambiar /etc/nsswitch.confa leer hosts: files dnsfuncionó para mí. Solo como una nota al margen interesante, he configurado varios Raspberry Pis con Raspian Jessie las últimas semanas, y todos han requerido este cambio.
Patrick Tucci