'localhost' parou de funcionar como um alias para '127.0.0.1' para SSHing em minha VM VirtualBox do OSX. Por que e como consertar?

'localhost' parou de funcionar como um alias para '127.0.0.1' para SSHing em minha VM VirtualBox do OSX. Por que e como consertar?

A pergunta explica o problema. Durante meses nunca tive problemas nesse sentido. Então, ontem de manhã, não consegui entrar na minha VM! Demorou muito para solucionar o problema, mas aqui estava a solução:

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

Então, por que isso teria acontecido e, mais importante, como faço para corrigir isso?

Eu tentei dig localhost, o que parece me dizer que ainda há algum tipo de conexão entre localhost e 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

Responder1

localhost normalmente é definido no arquivo /etc/hosts, não no DNS (embora seu DNS tenha uma entrada de backup de emergência para ele). Aqui está o conteúdo normal de /etc/hosts no OS X (como no 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

Observe que se você precisar editar/recriar este arquivo, ele deverá estar em formato de texto simples (sem formatação alguma), com finais de linha no estilo unix (linefeeds). Você pode usar um editor de linha de comando como viou nano; se você quiser um editor GUI, eu recomendoTextWranglerou seu irmão mais velhoBBpara editar arquivos como este, já que eles são bons em não adicionar coisas falsas "úteis" aos arquivos que você edita e também podem usar direitos de administrador para editar arquivos do sistema (como /etc/hosts).

(Além disso, não é realmente visível ou importante, mas são caracteres de tabulação entre os endereços e nomes.)

Para testar pesquisas como esta, use dscacheutil( dscacheutil -q host -a name localhost) em vez de algo como dig. A razão para usar dscacheutilé que dig(e hoste nsloogup) ignora a política de pesquisa do sistema e apenas verifica o DNS diretamente, enquanto dscacheutilusa a política de pesquisa completa do sistema. Como resultado, dignão verá entradas em/etc/hosts, nem fará pesquisas mDNS (Bonjour), nem procurará entradas de computador em serviços de diretório, nem verá entradas em cache de pesquisas anteriores, ou...

Quando você tiver o arquivo hosts configurado corretamente, esta dscacheutilserá a aparência da saída de:

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

name: localhost
ip_address: 127.0.0.1

informação relacionada