Warum löst SSH diesen Hostnamen nicht auf?

12

Wenn ich versuche, eine SSH-Verbindung zu einem Host im angegebenen Netzwerk herzustellen storage, tritt ein DNS-Auflösungsfehler auf:

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

Aber wenn ich DNS mit Host abfrage, funktioniert es

$ host storage
storage has address 192.168.20.103

Wie hostkann man die IP finden, aber sshnicht?

Jldugger
quelle
14
Gewöhnen Sie sich an, FQDNs überall zu verwenden. Wenn dies das erste Problem ist, das Sie in dieser Hinsicht hatten, haben Sie außerordentlich viel Glück. Es kann sehr haarig sein, diese aufzuspüren, und es wird nicht Ihre letzte sein. Hier ist ein Hinweis: Ist storageeine Live-Top-Level-Domain im Internet.
Michael Hampton
Können Sie zu 192.168.20.103 'ssh'?
IvanGoneKrazy
2
Wo haben Sie den Hostnamen 192.168.20.103 definiert? / etc / hosts?
Waisenkinder
3
Das Tippen von FQDNs ist ein Schmerz. Ein Alias ​​von "storage" nach "storage.mydomain.com" in .ssh / config ist dagegen sehr praktisch.
pjc50
1
@ pjc50 Ich tippe stound drücke dann die Tabulatortaste.
Michael Hampton

Antworten:

28

sshund hostlösen Sie Namen auf völlig unterschiedlichen Wegen auf. Es ist daher nicht verwunderlich, dass sie manchmal zu unterschiedlichen Ergebnissen führen, insbesondere wenn der aufzulösende Name kein FQDN ist (daher der Vorschlag, FQDNs überall zu verwenden).

Sie erwähnen nichts über Ihr Betriebssystem und Ihre Systemkonfiguration, deshalb muss ich es allgemein halten, mit Blick auf Linux: MacOS-Details sind etwas anders und Windows noch mehr, aber die allgemeinen Konzepte sind die gleichen.

  • hostfragt DNS ab, durchsucht also im Grunde /etc/resolv.confdie dort aufgelisteten Server und fügt möglicherweise einen Domänennamen hinzu, wenn der Hostname noch nicht vollständig qualifiziert ist. Es ignoriert jede andere mögliche Quelle, aber Vorsicht , dass in diesen Tagen viele Systeme einen lokalen Caching - DNS - Server ( in der Regel laufen dnsmasq) , die liest /etc/hostsund anderen Quellen , bevor andere DNS - Server abfragen, so dass , wenn hostAbfragen, die lokalen Server, ergibt sich aus /etc/hostskann einschleichen.

  • sshfolgt seinem eigenen Weg. Ich werde beschreiben, was opensshunter Linux funktioniert, andere Implementierungen unterscheiden sich. Zuerst sucht es nach Host-Kurznamen, die in Konfigurationsdateien definiert sind (systemweit /etc/ssh/ssh_configund benutzerspezifisch ~/.ssh/config), dann durchsucht es andere Quellen in der von der hosts:Direktive in angegebenen Reihenfolge /etc/nsswitch.conf. Angenommen, es ist so etwas wie:

    hosts: files dns
    

    das heißt: schau /etc/hostsrein und frage dann den DNS ( /etc/resolv.confnochmal) ab. Andere mögliche Quellen sind die veralteten nisund netinfoDienste, LDAP, Active Directory, Sie benennen sie.

Um Ihren speziellen Fall zu debuggen, sollten Sie dem Pfad folgen, dem Ihre Implementierung sshfolgt, und herausfinden, wo es hängen bleibt.

Dario
quelle
6
ltrace / strace kann Ihnen Hinweise geben, wie ssh tatsächlich versucht, die Domain aufzulösen ... und das Kommandozeilen-DNS-Tool ist wahrscheinlich getent.
Rackandboneman
Ihre Empfehlung, /etc/nsswitch.confzum Lesen zu wechseln , hat hosts: files dnsmir geholfen. Als interessante Randnotiz habe ich in den letzten Wochen mit Raspian Jessie mehrere Himbeer-Pis eingerichtet, die alle diese Änderung erforderten.
Patrick Tucci