'localhost' перестал работать как псевдоним для '127.0.0.1' для SSH-подключения к моей виртуальной машине VirtualBox из OSX. Почему и как исправить?

'localhost' перестал работать как псевдоним для '127.0.0.1' для SSH-подключения к моей виртуальной машине VirtualBox из OSX. Почему и как исправить?

Вопрос объясняет проблему. Месяцами у меня никогда не было проблем подобного рода. А вчера утром я не смог попасть в свою виртуальную машину! Долго разбирался, но вот решение:

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 [email protected]
[email protected]'s password: 
Last login: Tue Jul  1 22:37:59 2014 from 10.0.2.2

Итак, почему это произошло, и, что еще важнее, как это исправить?

Я попробовал dig localhost, и, похоже, мне это подсказало, что между localhost и 127.0.0.1 все еще есть какая-то связь:

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

решение1

localhost обычно определяется в файле /etc/hosts, а не в DNS (хотя в вашем DNS есть аварийная резервная запись для него). Вот обычное содержимое /etc/hosts в OS X (как в 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

Обратите внимание, что если вам нужно отредактировать/создать этот файл заново, он должен быть в формате простого текста (без форматирования вообще) с окончаниями строк в стиле unix (переводы строк). Вы можете использовать редактор командной строки, например viили nano; если вам нужен редактор с графическим интерфейсом, я рекомендуюTextWranglerили его старший братBBEditдля редактирования таких файлов, поскольку они хороши тем, что не добавляют лишние «полезные» вещи в редактируемые вами файлы, а также могут использовать права администратора для редактирования системных файлов (например, /etc/hosts).

(К тому же, это не очень заметно и не важно, но это символы табуляции между адресами и именами.)

Для тестирования таких поисков используйте dscacheutil( dscacheutil -q host -a name localhost) вместо чего-то вроде dig. Причина использования dscacheutilв том, что dighostи nsloogup) обходят политику поиска системы и просто проверяют DNS напрямую, при этом dscacheutilиспользуя полную политику поиска системы. В результате digне будут видны записи в /etc/hosts, или выполняться поиски mDNS (Bonjour), или искать записи Computer в службах каталогов, или просматривать кэшированные записи из предыдущих поисков, или...

Если файл hosts настроен правильно, dscacheutilвывод должен выглядеть следующим образом:

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

name: localhost
ip_address: 127.0.0.1

Связанный контент