![OSX から VirtualBox VM に SSH 接続する際、'localhost' が '127.0.0.1' のエイリアスとして機能しなくなりました。原因と修正方法を教えてください。](https://rvso.com/image/1414632/OSX%20%E3%81%8B%E3%82%89%20VirtualBox%20VM%20%E3%81%AB%20SSH%20%E6%8E%A5%E7%B6%9A%E3%81%99%E3%82%8B%E9%9A%9B%E3%80%81'localhost'%20%E3%81%8C%20'127.0.0.1'%20%E3%81%AE%E3%82%A8%E3%82%A4%E3%83%AA%E3%82%A2%E3%82%B9%E3%81%A8%E3%81%97%E3%81%A6%E6%A9%9F%E8%83%BD%E3%81%97%E3%81%AA%E3%81%8F%E3%81%AA%E3%82%8A%E3%81%BE%E3%81%97%E3%81%9F%E3%80%82%E5%8E%9F%E5%9B%A0%E3%81%A8%E4%BF%AE%E6%AD%A3%E6%96%B9%E6%B3%95%E3%82%92%E6%95%99%E3%81%88%E3%81%A6%E3%81%8F%E3%81%A0%E3%81%95%E3%81%84%E3%80%82.png)
質問は問題を説明しています。数か月間、このような問題は一度もありませんでした。ところが、昨日の朝、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 localhost
dig
dscacheutil
dig
host
nsloogup
dscacheutil
dig
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