Die Meldung auf jedem System
Der erste Teil kommt von SSH. Der Teil nach dem Doppelpunkt kommt vom Resolver Ihres Systems.
ssh: Could not resolve hostname server: nodename nor servname provided, or not known
Das ist macOS. Unter Linux lautet derselbe Fehler:
ssh: Could not resolve hostname server: Name or service not known
Linux kennt auch eine dritte Form, die häufig ist, wenn das Netz oder der DNS-Server ausgefallen ist:
ssh: Could not resolve hostname server: Temporary failure in name resolution
Das Wort zwischen hostname und dem Doppelpunkt ist genau das, was SSH nachschlagen wollte. Lesen Sie es zuerst, denn es zeigt oft den Fehler.
Ursache 1: ein Tippfehler oder ein Alias, den SSH nicht sieht
ssh -G server | grep -E '^(hostname|port|user) '
Das gibt aus, was SSH verwenden würde, ohne sich zu verbinden. Haben Sie einen Alias aus Ihrer Konfiguration erwartet und hostname wiederholt nur Ihre Eingabe, hat kein Host-Block gepasst. Prüfen Sie Folgendes:
- Der Alias ist in
~/.ssh/configgenauso geschrieben. - Der Block hat eine Zeile
HostName, und diese hat keinen Tippfehler. Ein falscher Wert dort erscheint in der Fehlermeldung anstelle des Alias. - Sie sind derselbe Benutzer.
sudo ssh serverliest die Konfiguration von Root, nicht Ihre.
Wie Aliase und Host-Blöcke zugeordnet werden, zeigen die Beispiele für die ssh-config-Datei.
Ursache 2: Der Port oder eine URL ist Teil des Namens
SSH liest weder host:port noch eine Webadresse. Diese beiden scheitern mit demselben Fehler, und der Fehler zeigt den ganzen String als Namen:
ssh user@example.com:22
ssh https://example.com
ssh: Could not resolve hostname example.com:22: nodename nor servname provided, or not known
Nutzen Sie eine dieser Formen:
ssh -p 2222 user@example.com
ssh ssh://user@example.com:2222
Ein verirrtes Leerzeichen ergibt eine andere Meldung, hostname contains invalid characters. Prüfen Sie auf eingefügte Leerzeichen oder Zeilenumbrüche.
Ursache 3: DNS
Prüfen Sie den Namen außerhalb von SSH, mit dem Resolver, den SSH verwendet.
Unter macOS:
dscacheutil -q host -a name example.com
Unter Linux:
getent hosts example.com
Leere Ausgabe heißt, dieser Rechner kann den Namen nicht auflösen. Fragen Sie dann direkt einen öffentlichen Resolver:
dig +short example.com @1.1.1.1
- Eine Antwort vom öffentlichen Resolver, aber nicht von Ihrem System: Ihre lokale DNS-Einrichtung oder Ihr Cache ist schuld. Leeren Sie ihn, unter macOS mit
sudo dscacheutil -flushcache; sudo killall -HUP mDNSResponderund unter systemd-Linux mitresolvectl flush-caches, oder wechseln Sie den DNS-Server. - Nirgends eine Antwort: Der Eintrag existiert nicht. Es kann ein neuer Eintrag sein, der sich noch nicht verbreitet hat, ein entfernter oder ein Tippfehler in der Zone.
Für einen Namen, den nur Sie verwenden, etwa einen Rechner zu Hause, können Sie DNS umgehen: Tragen Sie eine Zeile in /etc/hosts ein, oder schreiben Sie die Adresse in die Zeile HostName Ihrer ~/.ssh/config.
Um weiterzuarbeiten, während Sie DNS klären, verbinden Sie sich per Adresse. Bedenken Sie, dass der Host-Schlüssel pro Name gespeichert wird, SSH Sie also erneut um Bestätigung bitten kann:
ssh user@203.0.113.10
Ursache 4: ein Name, den es nur in einem privaten Netz gibt
Firmennamen, .internal-Namen und Tailscale-MagicDNS-Namen lösen sich nur auf, solange Sie in diesem Netz sind. Hat es gestern funktioniert, prüfen Sie, ob das VPN an ist und seinen DNS-Server gesetzt hat.
Namen auf .local hängen von mDNS ab. macOS erledigt das ohne Zutun. Unter Linux brauchen sie meist Avahi und mdns4_minimal in /etc/nsswitch.conf. Gast-WLANs blockieren mDNS zwischen Geräten oft.
Ursache 5: kein Netzwerk
Temporary failure in name resolution heißt meist, dass das System gar keinen DNS-Server erreichen konnte. Prüfen Sie es mit einer Adresse, die keinen Namen braucht:
ping -c 1 1.1.1.1
Auf einem Linux-Server oder -Container sehen Sie sich auch /etc/resolv.conf an.
Fragen
Was bedeutet "nodename nor servname provided, or not known"?
So meldet macOS eine fehlgeschlagene Namensauflösung. SSH hat für den Namen keine IP-Adresse gefunden. Prüfen Sie die Schreibweise, den Alias in ~/.ssh/config und Ihr DNS.
Kann ich den Port nach einem Doppelpunkt angeben?
Nein. ssh liest host:22 als Teil des Namens. Verwenden Sie ssh -p 22 user@host oder die Form ssh://user@host:22.
Warum scheitert es nur mit sudo?
sudo ssh liest die ~/.ssh/config von root, nicht Ihre. Ihre Aliase sind dort unbekannt. Führen Sie ssh ohne sudo aus.