„localhost“ funktionierte nicht mehr als Alias ​​für „127.0.0.1“ für SSHing in meine VirtualBox-VM. Warum und wie beheben?

Die Frage erklärt das Problem. Seit Monaten hatte ich nie irgendwelche Probleme in dieser Richtung. Dann kam ich gestern Morgen nicht in meine VM! Die Fehlersuche hat lange gedauert, aber hier ist die Lösung:

Brendans-Mac-mini:~ Brendan$ ssh -p 3022 user@localhost
ssh: Could not resolve hostname localhost: nodename nor servname provided, or not known
Brendans-Mac-mini:~ Brendan$ ssh -p 3022 user@127.0.0.1
user@127.0.0.1's password: 
Last login: Tue Jul  1 22:37:59 2014 from 10.0.2.2

Also, warum sollte das passiert sein, und was noch wichtiger ist, wie kann ich es beheben?

Ich habe versucht dig localhost, was mir zu sagen scheint, dass es immer noch eine Art Verbindung zwischen localhost und 127.0.0.1 gibt:

Brendans-Mac-mini:~ Brendan$ dig localhost

; <<>> DiG 9.8.3-P1 <<>> localhost
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 28989
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0

;; QUESTION SECTION:
;localhost.         IN  A

;; ANSWER SECTION:
localhost.      655360  IN  A   127.0.0.1

;; Query time: 7 msec
;; SERVER: 10.0.1.1#53(10.0.1.1)
;; WHEN: Wed Jul  2 09:44:44 2014
;; MSG SIZE  rcvd: 43
Gefragt und beantwortet bei Super User . Ich stimme dafür, hier zu schließen, es sei denn, ein Mod denkt, dass es einen besseren Weg gibt, damit umzugehen.
Siehe meine Flagge - IMO am besten auch hier beantworten.

Antworten (1)

[Dies ist kopiert und leicht erweitert von meiner Antwort auf Superuser .]

localhost ist normalerweise in der Datei /etc/hosts definiert, nicht im DNS (obwohl Ihr DNS einen Notfall-Backup-Eintrag dafür hat). Hier ist der normale Inhalt von /etc/hosts in OS X (ab Mavericks):

##
# Host Database
#
# localhost is used to configure the loopback interface
# when the system is booting.  Do not change this entry.
##
127.0.0.1       localhost
255.255.255.255 broadcasthost
::1             localhost 
fe80::1%lo0     localhost

Beachten Sie, dass diese Datei, wenn Sie sie bearbeiten/neu erstellen müssen, im Nur-Text-Format (überhaupt keine Formatierung) mit Zeilenenden im Unix-Stil (Zeilenvorschübe) vorliegen muss. Sie können einen Befehlszeilen-Editor wie vioder verwenden nano; Wenn Sie einen GUI-Editor möchten, empfehle ich TextWrangler oder seinen großen Bruder BBEdit zum Bearbeiten von Dateien wie diesem, da sie gut darin sind, den von Ihnen bearbeiteten Dateien keine unechten "hilfreichen" Dinge hinzuzufügen, und auch Administratorrechte zum Bearbeiten verwenden können Systemdateien (wie /etc/hosts).

(Außerdem ist es nicht wirklich sichtbar oder wichtig, aber das sind Tabulatorzeichen zwischen den Adressen und Namen.)

Verwenden Sie zum Testen von Lookups wie diesem dscacheutil( dscacheutil -q host -a name localhost) anstelle von etwas wie dig. Der Grund für die Verwendung dscacheutilist, dass dig(and hostand nsloogup) die System-Lookup-Richtlinie umgeht und nur DNS direkt überprüft, während dscacheutildie vollständige System-Lookup-Richtlinie verwendet wird. Infolgedessen werden digkeine Einträge in /etc/hosts angezeigt oder mDNS (Bonjour)-Suchvorgänge durchgeführt oder in Verzeichnisdiensten nach Computereinträgen gesucht oder zwischengespeicherte Einträge aus früheren Suchvorgängen angezeigt oder ...

Wenn Sie die hosts-Datei richtig eingerichtet haben, dscacheutilsollte die Ausgabe von wie folgt aussehen:

$ dscacheutil -q host -a name localhost
name: localhost
ipv6_address: ::1
ipv6_address: fe80:1::1

name: localhost
ip_address: 127.0.0.1