host kann einen Hostnamen auflösen, ssh nicht

14

Ich versuche, über SSH eine Verbindung von einem 10.04-System zu einem 12.04-System herzustellen. Seltsamerweise resolv.confscheinen die Regeln nur selektiv zu wirken, was mich verwundert. Beobachten:

[2] user@mach:~$ ssh pangolin
ssh: Could not resolve hostname pangolin: Name or service not known
[2] user@mach:~$ host pangolin
pangolin.subdomain.domain.tld has address 172.16.7.12

subdomain.domain.tldist in der searchZeile in /etc/resolv.confund mit hostdem Namen wird ordnungsgemäß nach diesen Regeln gesucht. Mit dem SSH-Client ssherhalte ich jedoch den oben wiedergegebenen Fehler. Wie kann das sein? Ich hatte immer den Eindruck, dass die Namensauflösungsregeln in resolv.confsystem-global gelten.

Hinweis: /etc/hostsDeklariert den Namen pangolinüberhaupt nicht. Das Paket openssh-serverist auf dem Zielcomputer konfiguriert. Die Frage ist nur, warum die Namensauflösung zwischen diesen beiden Programmen nicht konsistent ist.

Ein weiterer Hinweis: Der Befehl funktioniert einwandfrei, wenn ich den vollqualifizierten Domänennamen eingebe, d pangolin.subdomain.domain.tld. H.

In der Zwischenzeit habe ich den Client-Rechner (10.04) neu gestartet und das Problem besteht immer noch. Da kein DNS-Caching-Daemon installiert ist, sollte dies meines Erachtens sowieso kein Problem sein.


Die im Kommentar verlangten Informationen:

$ grep host /etc/nsswitch.conf
hosts:          files dns

/etc/resolv.confIch habe die Domainnamen konsequent transformiert:

# Dynamic resolv.conf(5) file for glibc resolver(3) generated by resolvconf(8)
#     DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN
nameserver 172.16.1.1
nameserver 172.16.1.5
search subdomain.domain1.com domain1.com domain2 domain3.com domain2.ccTLD domain3.net dev.domain1.com sdk.dev.domain1.com

... und das Ganze /etc/nsswitch.conf:

$ cat /etc/nsswitch.conf
# /etc/nsswitch.conf
#
# Example configuration of GNU Name Service Switch functionality.
# If you have the `glibc-doc-reference' and `info' packages installed, try:
# `info libc "Name Service Switch"' for information about this file.

passwd:         compat
group:          compat
shadow:         compat

hosts:          files dns
networks:       files

protocols:      db files
services:       db files
ethers:         db files
rpc:            db files

netgroup:       nis

... und /etc/network/interfaces, woher kommt resolv.confin 12.04:

# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).

# The loopback network interface
auto lo
iface lo inet loopback

# The primary network interface
auto eth0
iface eth0 inet static
        address 172.16.1.234
        netmask 255.255.0.0
        gateway 172.16.255.254
        dns-nameservers 172.16.1.1 172.16.1.5
        dns-search domain1.com. domain2. domain3.com. domain2.ccTLD. domain3.net. dev.domain1.com. sdk.dev.domain1.com. subdomain.domain1.com.
        dns-domain subdomain.domain1.com.

Hinweis: Die Umwandlung der Domain-Namen wurde mit durchgeführt sed, sodass sie zwischen den verschiedenen reproduzierten Dateien konsistent sind.


Es gibt keine ~/.ssh/config, aber hier ist die globale ( /etc/ssh/ssh_config), der Kürze halber geschrumpft:

$ grep -v '^#' /etc/ssh/ssh_config |grep -v '^[[:space:]]*$'
Host *
    SendEnv LANG LC_*
    HashKnownHosts yes
    GSSAPIAuthentication yes
    GSSAPIDelegateCredentials no

$ mtr pangolin
Name or service not known: Success
0xC0000022L
quelle
1
Könnten Sie Ihre /etc/resolv.confund die Ausgabe dieses Befehls veröffentlichen grep host /etc/nsswitch.conf?
Awi
@Awi: fügte hinzu, plus ein bisschen mehr.
0xC0000022L
Zwei Fragen 1) Funktioniert es wie vorgesehen, wenn Sie den FQDN verwenden? 2) Können Sie den Inhalt von ~ / .ssh / config und / etc / ssh / ssh_config posten, um festzustellen, ob es irgendwelche Verrücktheiten gibt?
Patrick Regan
@PatrickRegan: Ich bearbeite das angeforderte Material in der Frage. Ja, es funktioniert mit dem fqdn :) ... (wird auch die Frage in dieser Hinsicht anpassen)
0xC0000022L
@STATUS_ACCESS_DENIED: Sehen Sie etwas Seltsames mit mtr pangolin?
12.

Antworten:

12

Während sshandere Programme, wie z. B. pingder Glibc-Resolver, zum Nachschlagen des Hostnamens (in diesem Fall 'pangolin') verwendet werden, wird hostder Name direkt im DNS nachgeschlagen, wobei der Glibc-Resolver umgangen wird. Das ist der unterschied

Angesichts der Tatsache, dass die glibc Resolver, auf Ihrem Computer ist, konfiguriert , um zu versuchen dnsnach files, ich kann nicht erklären , warum der Resolver nicht , wo hosterfolgreich ist .

Ich habe dieses Verhalten bereits beobachtet, als dnsmasq als lokaler Weiterleitungs-Nameserver verwendet wurde (https://bugs.launchpad.net/ubuntu/+source/dnsmasq/+bug/998712), aber Sie verwenden keinen solchen lokalen Nameserver. aber vielleicht war das problem da und hier nicht in dnsmasq sondern im glibc resolver.

jdthood
quelle
Fundierte und prägnante Antwort. Weiter so! Vielen Dank.
0xC0000022L
9

Ihr ssh versucht möglicherweise, IP6 aufzulösen, und läuft dabei aus. Wenn Sie nicht IP6 verwenden versuchen IP6 in dem Deaktivieren /etc/ssh/ssh_configvon Address von Wechsel anyzu inet.

Arnaud Kleinveld
quelle
Das hat bei mir funktioniert, danke! Ich habe es vorher nicht bemerkt, weil alle anderen Server, die ich versucht habe, eine Verbindung zu unterstütztem ipv6 herzustellen, bereits vorhanden sind.
Mniess
3

Ich bin ein paar Mal darauf gestoßen, und es wirft mich immer um, bis ich mich an die sechs Domain-Beschränkungen in der Suchliste in resolv.conf erinnere.

Golights
quelle
1. Das ist ein sehr guter Punkt. Der Fragetext enthält eine Auflistung der Datei resolv.conf (obwohl sie anscheinend bearbeitet wurde, um die Informationen zu anonymisieren). Die searchZeile der Datei enthält mehr als sechs Domainnamen. Der Glibc-Resolver betrachtet nur die ersten sechs Domänen oder 256 Zeichen, je nachdem, welcher Wert geringer ist. Ich spekuliere, dass das hostDienstprogramm keine solche Einschränkung hat und dass hostes erfolgreich ist, den Namen mit der siebten oder späteren Domainnamenerweiterung aufzulösen.
jdthood
Beachten Sie auch, dass in einer einzelnen Zeilengruppe in / etc / network / interfaces nicht sowohl eine dns-searchZeile als auch eine dns-domainZeile enthalten sein darf . Die dns-domainOption ist tatsächlich veraltet. Alle Such-Domain-Namen sollten in der dns-searchZeile angegeben werden .
jdthood
3

Ich habe diese Fehlermeldung erhalten, indem ich versehentlich eine Domain-Eintragszeile vor die beiden Nameserver-Zeilen gestellt habe. nslookup hat funktioniert. wget hat funktioniert. ssh, scp, rsync fehlgeschlagen.

Verschieben der Domain unter Nameserver und Speichern der resolv.conf behoben. nichts anderes war für mich notwendig.

Louy
quelle
3

Ich weiß, dass dies eine alte Frage ist, aber ich werde hinzufügen, was für mich funktioniert hat.

Ich hatte das gleiche Problem und fand , dass in meinem nsswitch.confgibt es mdnszusätzlich zu filesund dns. Durch das Entfernen wurde mdns4dieses Problem für mich behoben.

J Hart
quelle
arbeitete auch für mich - Ubuntu 16.04
Buddy Palumbo
-1

Ich hatte Probleme beim Zugriff auf meinen SFTP-Server. Der FTP-Benutzer konnte sich nicht von einem anderen Server bei SFTP anmelden. (Solaris - Openssh). Ich habe den "dns" -Eintrag in der nsswitch.conf kommentiert und das Problem behoben.

Vielen Dank, Arun Janardhanan (IBS Software Services)

Arun
quelle