OSX から VirtualBox VM に SSH 接続する際、'localhost' が '127.0.0.1' のエイリアスとして機能しなくなりました。原因と修正方法を教えてください。

OSX から VirtualBox VM に SSH 接続する際、'localhost' が '127.0.0.1' のエイリアスとして機能しなくなりました。原因と修正方法を教えてください。

質問は問題を説明しています。数か月間、このような問題は一度もありませんでした。ところが、昨日の朝、VM にアクセスできなくなりました。トラブルシューティングに長い時間がかかりましたが、解決策は次のとおりです。

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 は通常、DNS ではなく /etc/hosts ファイルで定義されます (ただし、DNS にはそのための緊急バックアップ エントリがあります)。OS X (Mavericks 時点) の /etc/hosts の通常の内容は次のとおりです。

##
# 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スタイルの行末(ラインフィード)を使用する必要があります。またはなどのコマンドラインエディターを使用できます。GUIviエディターnanoが必要な場合は、テキストラングラーまたはその兄貴BB編集このようなファイルを編集する場合、編集するファイルに不必要な「役に立つ」ものを追加しないという点が優れており、また、管理者権限を使用してシステム ファイル (/etc/hosts など) を編集できるためです。

(また、あまり目立たず重要ではありませんが、これらはアドレスと名前の間にあるタブ文字です。)

このような検索をテストするには、のようなものではなく、 dscacheutil( ) を使用します。 を使用する理由は、 (およびおよび) はシステム検索ポリシーをバイパスして DNS を直接チェックするのに対し、 は完全なシステム検索ポリシーを使用するためです。その結果、 は/etc/hosts 内のエントリを表示せず、mDNS (Bonjour) 検索も実行せず、ディレクトリ サービス内の Computer エントリも検索せず、以前の検索からキャッシュされたエントリも表示しません。dscacheutil -q host -a name localhostdigdscacheutildighostnsloogupdscacheutildig

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

関連情報