VPNはMacの名前を変えたのか?三つのホスト名の値を比べる
Terminalのプロンプトが変わったからといって名前が変わったわけではない。ComputerName、LocalHostName、HostNameはそれぞれ別の値を保持しており、そのうちの一つは単に未設定のことも多い。
以前はあることを示していたプロンプトが今は別のことを示しており、変化したのはVPN接続でした。Macの名前が変わったと結論づける前に多くの人が持っている証拠はこれだけですが、それでは足りません。macOSは少なくとも三つの別々の名前の値を保存しており、それぞれ役割が異なり、シェルのプロンプトはそのうち最大一つを誤読しやすい形で表示するだけです。
三つの値を比べるにはコマンド三つで足り、誰かが何かを編集する前に疑問は片付きます。
三つの値、三つの役割
三つともシステムが快く報告する文字列であり、誘惑は最初に見つけたものを権威ある値とみなすことです。こうして利用者は間違ったフィールドを「直し」、症状が残るのを見ることになります。
| Value | What it is responsible for |
|---|---|
ComputerName | The friendly name a person sees in About and on the network browser; this is the one users mean by "my Mac's name" |
LocalHostName | The Bonjour name used on the local link, usually shown with a .local suffix in Sharing |
HostName | An explicitly configured host name that may simply not be set at all |
三行目こそ、ほとんどの混乱が始まる場所です。設定されていないHostNameは異常ではなく正常な状態で、ホスト名が必要なときにシステムが別の情報源に頼るという意味です。この空欄を破損と読むと、決して必要ではなかった修正に進んでしまいます。それは本当の問いも隠します。問いはマシンの名前ではなく、その時点で特定の検索やプロンプトがどの名前を使っているかであり、それに答えれば空の値は不具合には見えなくなります。
書く前に読む
この三つのコマンドは値を報告するだけです。何も変更しないので、調査中に実行しても安全です。
scutil --get ComputerName
scutil --get LocalHostName
scutil --get HostName
許可されたVPN接続の前後で同じローカルセッションで実行し、どの値が実際に異なるかを記録します。何も変わらずプロンプトがまだおかしく見えるなら、名前は最初から問題ではなく、シェルの設定かリモートセッションのどこかが別の文字列を表示しています。
コンピュータ名とローカルホスト名に関するAppleのガイドでは、親しみやすい名前はGeneralとAboutに、ローカル名はGeneralとSharingに置かれています。同じリンク上の別のMacがすでに名前を使っている場合に自動で付く接尾辞についても説明されており、予期しない数字を改ざんの証拠とみなす前に知っておく価値があります。
シェルのプロンプトが実際に証明すること
プロンプトはシェルが組み立てる文字列で、そのホスト名要素は展開されたホスト名、その短縮形、あるいはプロファイルファイルにハードコードされた値から来ることがあります。まったく別のマシン上のSSHセッションのものであることもあり、これは最も地味な説明でありながら、VPNをつないだ瞬間にプロンプトが変わった場合に最もよくある説明です。
自分が何と呼ばれているかを確認する前に、どこにいるかを確認します。hostnameを実行して三つの保存値と比べ、次にシェルのプロンプト設定を見てホストを表示しているかどうかを確かめます。プロンプトに誰かが何年も前に設定ファイルへ打ち込んだリテラル文字列が含まれているなら、システム側の変更でそれが一致することは決してありません。
この比較は報告にも重要です。見た目が違うプロンプトと、本当に変わった保存済みのComputerNameは、所有者の異なる二つの所見であり、これを一文にまとめると次の担当者を間違った場所へ送ります。
VPNが正当に命名へ関与できる範囲
VPNはどのリゾルバと検索ドメインが関係するかを変え、クライアントが受け取る設定になっていればDHCPでホスト名を渡すこともできます。それは実在する仕組みで、「VPNがMacの名前を変えた」より狭い話です。リゾルバが特定のアドレスに対してどの名前を解決するかを変えても、保存されたローカルの値は書き換わりません。
ですから二つの問いを分けます。マシン自身の身元が違うのか、それとも何か別のものへ到達するための名前が違うのか。前者には三つの保存値が答え、後者にはDNS検索と使用中の接続プロファイルが答えます。両者を同じ問いとして扱うと、名前解決の問題に対して身元の設定を変えることになります。
恒久的なホスト名が本当に必要な場合
値を設定することは意図的な管理操作であり見た目の好みではなく、値はそのマシンの命名ポリシーを持つ人から来るべきです。プロンプトを馴染み深く見せるために管理された名前を上書きすると、証明書の検査、監視、その他ホストを識別するあらゆるものが壊れかねません。
変更が本当に必要な場合、値を読んだのと同じツールが値を書き込み、HostNameは完全修飾名を受け付ける一方、他の二つはローカル形式を想定しています。何をなぜ変えたか、そしてこれこそ次にマシンを見る人を驚かせる種類の編集だからこそ、記録してください。
ほとんどの報告では、正しい答えは問いが示すより小さく、三つの値を読んでどれが違うかを特定し、それだけを直します。プロンプトは何かの症状であり、三つのコマンドは何の症状かを教えてくれます。