Lorsque j'essaie de SSH vers un hôte sur le réseau nommé storage
, j'obtiens un échec de résolution DNS:
$ ssh storage
ssh: Could not resolve hostname storage: Name or service not known
Mais quand je demande DNS avec l'hôte, cela fonctionne
$ host storage
storage has address 192.168.20.103
Comment peut-il host
trouver l'IP mais ssh
ne le peut pas?
domain-name-system
ssh
jldugger
la source
la source
storage
est un domaine de premier niveau en direct sur Internet.sto
puis je tape Tab.Réponses:
ssh
ethost
résoudre les noms en suivant des chemins complètement différents, il n'est donc pas surprenant qu'ils donnent parfois des résultats différents, en particulier lorsque le nom à résoudre n'est pas un FQDN (d'où la suggestion d'utiliser des FQDN partout.)Vous ne mentionnez rien à propos de votre système d'exploitation et de la configuration de votre système, donc je dois rester général, avec un œil sur Linux: les détails de MacOS sont quelque peu différents, et Windows encore plus, mais les concepts généraux sont les mêmes.
host
interroge DNS, donc en gros, il recherche/etc/resolv.conf
et interroge les serveurs qui y sont répertoriés, en attachant éventuellement un nom de domaine si le nom d'hôte n'est pas déjà pleinement qualifié. Il ignore toutes les autres sources possibles, mais sachez que de nos jours, de nombreux systèmes exécutent un serveur DNS de mise en cache local (généralementdnsmasq
) qui lit/etc/hosts
et d'autres sources avant d'interroger d'autres serveurs DNS, donc si deshost
requêtes sur ce serveur local, les résultats/etc/hosts
peuvent s'introduire.ssh
suit son propre chemin. Je décrirai ce queopenssh
fait sous Linux, les autres implémentations diffèrent. Tout d'abord, il recherche les surnoms d'hôte définis dans les fichiers de configuration (à l'échelle du système/etc/ssh/ssh_config
et par utilisateur~/.ssh/config
), puis il recherche d'autres sources dans l'ordre spécifié par lahosts:
directive dans/etc/nsswitch.conf
. Disons que c'est quelque chose comme:cela signifie: recherchez
/etc/hosts
puis interrogez le DNS (à/etc/resolv.conf
nouveau). D'autres sources possibles sont les services obsolètesnis
etnetinfo
, LDAP, Active Directory, vous les nommez.Pour déboguer votre cas particulier, vous devez suivre le chemin suivi par votre implémentation
ssh
et savoir où il se bloque.la source
/etc/nsswitch.conf
pour lire ahosts: files dns
fonctionné pour moi. Juste comme une note intéressante, j'ai mis en place plusieurs Raspberry Pis avec Raspian Jessie ces dernières semaines, et ils ont tous exigé ce changement.