Comment se fait-il que ssh somename fonctionne, alors que nslookup somename ne fonctionne pas?

16

Comment connaître l'adresse IP d'un hôte auquel somenameje peux sshaccéder? Si je fais nslookupsur cet hôte, il dit "pas de réponse". Comment sshrésoudre son nom alors?


Ni /etc/hostsaucune .ssh/configexplication n'a fonctionné.


ÉDITER

Désolé somenameest pleinement qualifié.

ssh somename.somedomain

fonctionne, tandis que

ping somename.somedomain

et

nslookup somename.somedomain

ne pas

Dims
la source
12
Est-il répertorié dans /etc/hostsou ~/.ssh/config?
Stephen Kitt
1
Le nom peut également être résolu à l'aide de mDNS (DNS multidiffusion) ou LLMNR (résolution de nom de multidiffusion lien local).
Johan Myréen
Il peut avoir une entrée dans votre fichier .ssh / config
Tagwint
1
@Dims Vous pouvez essayer de faire un ping somename.local. .localest un domaine spécial réservé au mDNS. Pour LLMNR, vous pouvez utiliser ce script NMAP.
Johan Myréen
2
@mckenzm non, ce ne sera pas le cas.
Stephen Kitt

Réponses:

31

Nslookup est un programme pour interroger les serveurs de noms de domaine Internet . Nslookup est très bon pour interroger les serveurs DNS, mais il ne vous donne pas une image complète de la résolution de noms.

Sous Linux, la résolution des noms est le plus souvent contrôlée par NSS qui est configuré par /etc/nsswitch.conf. Plus précisément, cette configuration contient une hostsentrée. Par exemple:

hosts:          files dns

Dans l'entrée ci-dessus, vous pouvez voir que la première chose à interroger est filessuivie de dns, ce qui signifie qu'elle /etc/hostssera interrogée avant DNS. D'autres options existent, notamment LDAP , DNS multidiffusion et WINS .

En répondant directement à votre question, SSH résout le nom d'hôte en une adresse IP à l'aide de NSS (extraction des résultats de plusieurs sources) où nslookup interroge uniquement le DNS.

Vous pouvez vérifier quel IP NSS résout un nom d'hôte en utilisant getent. Par exemple pour résoudre somename:

getent hosts somename

Aussi Dans le cas de SSH , vous pouvez configurer les informations spécifiques hôte /etc/ssh/ssh_configet ~/.ssh/config. Cela vous permettra même de spécifier une adresse IP pour un nom d'hôte, en ignorant entièrement la résolution de nom .:

Ce qui suit indique à SSH d'utiliser 192.168.1.25à la fois devet dev.example.com. SSH utilisera cette adresse, que ces noms existent ou non comme noms DNS pour une IP différente:

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

Comment connaître l'adresse IP d'un hôte auquel somenameje peux sshaccéder?

Utilisez l'indicateur verbeux ( -v) de la sshcommande:

ssh somename -v

La sortie doit contenir, entre autres, une ligne qui montre l'IP résolu du serveur auquel vous vous connectez:

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

Si je fais nslookup sur cet hôte, il dit "pas de réponse". Comment sshrésoudre son nom alors?

La cause la plus probable de sshpouvoir résoudre un nom d'hôte qui nslookupne peut pas est qu'il est configuré au sshniveau.

Par la ssh_config(5)page de manuel , il y a trois endroits où les sshfichiers de configuration sont recherchés:

  1. options de ligne de commande
  2. fichier de configuration de l'utilisateur (~ / .ssh / config)
  3. fichier de configuration à l'échelle du système (/ etc / ssh / ssh_config)

L'un de ces fichiers peut contenir votre nom d'hôte somename(ou un modèle qui lui correspond) comme alias d'un autre nom d'hôte ou IP. Par exemple:

# 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

Veuillez vous référer aux ssh_config(5)explications Hostet HostNamedirectives de la page de manuel et à la PATTERNSsection pour plus d'informations.

Jules Lamur
la source
Cette réponse ne répond pas à la question, qui était de savoir comment un nom d'hôte est reconnu, même s'il n'est pas serveur par un serveur DNS.
Johan Myréen
1
La réponse mentionne correctement un scénario très probable où ssh user@someserversemble "résoudre" le someservernom DNS (même si cela ne se produit pas réellement). Si le Host someserverest configuré dans un .ssh/configfichier, il est alors possible d'utiliser la commande ssh exactement comme les états OP même si le someservern'est pas du tout dans le DNS.
Fiisch
2
@ JohanMyréen La sortie de ssh -v somenameinclut l'adresse IP (quelles que soient les ssh_configentrées). Ainsi, il répond directement à la question "Comment connaître l'adresse IP d'un certain nom d'hôte vers lequel je peux ssh?", Tout en étant une bonne première étape vers la réponse "Comment se peut-il que ce nom ssh fonctionne ...?".
JigglyNaga
4

Philip est presque là, mais se dirige vers le .ssh/configtrou du trou qu'il est peu probable que vous ayez configuré.

Les commandes ...

getent hosts somename

... interroge NSS en utilisant la hosts:ligne de recherche dans /etc/nsswitch.conf, plutôt que simplement DNS comme le nslookupfait. Il est probable que votre environnement Unix utilise plusieurs services de nommage; éventuellement un type d'intégration AD.

Riches
la source
3
Je ne dirais pas que je suis parti sur cette route. J'ai ajouté un "aussi" pour être complet.
Philip Couling
@PhilipCouling Bien sûr, mais votre "pré-aussi" est incomplet - vous ne montrez pas comment résoudre arbitrairement un nom lorsque la question porte sur "$ chose contre nsloookup".
Rich
3
Comme déjà commenté sur le Q, hostfait normalement partie de bind-utils (ou équivalent) et comme les deux nslookupet digutilise uniquement DNS. OTOH getent hosts(ou peut-être ahosts) fait ce que vous décrivez.
dave_thompson_085
@ dave_thompson_085 Incorrect. hostinterroge d'autres services de noms. Convenu qui getent hostsest la meilleure méthode sans ambiguïté pour interroger "tous les services de noms configurés".
Rich
1
hostest uniquement DNS par les pages de manuel et confirmé par des tests sur les systèmes que j'utilise (CentOS, Ubuntu, FreeBSD, Solaris) ainsi qu'en amont . Voir aussi les (presque) dupes que j'ai commentés sur le Q qui disent aussi cela.
dave_thompson_085