!['localhost' перестал работать как псевдоним для '127.0.0.1' для SSH-подключения к моей виртуальной машине VirtualBox из OSX. Почему и как исправить?](https://rvso.com/image/1414632/'localhost'%20%D0%BF%D0%B5%D1%80%D0%B5%D1%81%D1%82%D0%B0%D0%BB%20%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%B0%D1%82%D1%8C%20%D0%BA%D0%B0%D0%BA%20%D0%BF%D1%81%D0%B5%D0%B2%D0%B4%D0%BE%D0%BD%D0%B8%D0%BC%20%D0%B4%D0%BB%D1%8F%20'127.0.0.1'%20%D0%B4%D0%BB%D1%8F%20SSH-%D0%BF%D0%BE%D0%B4%D0%BA%D0%BB%D1%8E%D1%87%D0%B5%D0%BD%D0%B8%D1%8F%20%D0%BA%20%D0%BC%D0%BE%D0%B5%D0%B9%20%D0%B2%D0%B8%D1%80%D1%82%D1%83%D0%B0%D0%BB%D1%8C%D0%BD%D0%BE%D0%B9%20%D0%BC%D0%B0%D1%88%D0%B8%D0%BD%D0%B5%20VirtualBox%20%D0%B8%D0%B7%20OSX.%20%D0%9F%D0%BE%D1%87%D0%B5%D0%BC%D1%83%20%D0%B8%20%D0%BA%D0%B0%D0%BA%20%D0%B8%D1%81%D0%BF%D1%80%D0%B0%D0%B2%D0%B8%D1%82%D1%8C%3F.png)
Вопрос объясняет проблему. Месяцами у меня никогда не было проблем подобного рода. А вчера утром я не смог попасть в свою виртуальную машину! Долго разбирался, но вот решение:
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