
Вопрос объясняет проблему. Месяцами у меня никогда не было проблем подобного рода. А вчера утром я не смог попасть в свою виртуальную машину! Долго разбирался, но вот решение:
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
в том, что dig
(и host
и 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