Linuxでの「sudo: unable to resolve host」警告の解決方法

beginner🐧 Linux2026-05-01| Linuxディストリビューション (Ubuntu, Debian, CentOS, RHEL, およびAWS/GCPなどのクラウドインスタンス)

Error Message

sudo: unable to resolve host myhostname: Name or service not known
#sudo#ホスト名#Linux管理#ネットワーク

問題点

理由もなくターミナルのコマンドが停滞することほど、作業の流れを断ち切るものはありません。最近、新しいDebianインスタンスでこれに気づきました。sudoコマンドを実行するたびに、カーソルが約5秒間点滅してから、ようやくパスワードを要求されるのです。その後、次のような警告が表示されます。

sudo: unable to resolve host my-web-server: Name or service not known

コマンド自体は最終的に実行されますが、デプロイの最中におけるこの5秒のラグは大きなストレスです。これはシステムのアイデンティティが同期されていないために発生します。ホスト名は設定されていますが、OSがその名前がネットワーク上のどこにあるのかを認識していません。本質的には、ローカルDNSのルックアップに失敗し、sudoがタイムアウトを待機せざるを得なくなっている状態です。

デバッグプロセス

なぜsudoはホスト名を気にするのでしょうか?舞台裏では、ホスト固有のルールを確認するためにsudoersファイルをチェックしています。現在のシステム名をIPアドレスに解決できない場合、決して返ってこない応答を待ってハング(一時停止)してしまいます。

ステップ1:現在のホスト名を確認する

まず、システムが認識している自身の名前を確認します。次のコマンドを実行してください。

hostname

より詳細な技術情報が必要な場合は、以下を使用します。

hostnamectl

ここではホスト名が my-web-server であると仮定します。これが、sudoがローカルレコード内で見つけられずにエラーを出している文字列です。

ステップ2:/etc/hosts を確認する

次に、/etc/hostsファイルを確認します。このファイルはローカルの「電話帳」として機能します。コンピュータがインターネット上のDNSサーバーに問い合わせる前に、名前をIPアドレスにマッピングします。

cat /etc/hosts

設定に問題がある場合、おそらく次のように表示されます。

127.0.0.1   localhost
::1         localhost ip6-localhost ip6-loopback

my-web-server が見当たらないことに注目してください。これが 127.0.0.1(ローカルループバックアドレス)にマッピングされていないため、システムが混乱し、処理が停滞してしまいます。

解決策

この修正は1分で終わる作業です。ホスト名がローカルマシン自体を指していることをシステムに伝えるだけです。

1. hostsファイルを編集する

テキストエディタで設定ファイルを開きます。これにはsudo権限が必要なため、最後にもう一度だけあの5秒の遅延が発生します。

sudo nano /etc/hosts

2. ホスト名のマッピングを追加する

127.0.0.1 で始まる行を探し、その末尾にホスト名を追加します。次のようになります。

127.0.0.1   localhost my-web-server

より分かりやすくしたい場合は、すぐ下の行に新しく追加することもできます。

127.0.0.1   localhost
127.0.0.1   my-web-server

IPv6を使用しているシステムでは、::1 の行も更新するのがベストプラクティスです。

::1         localhost ip6-localhost ip6-loopback my-web-server

保存して終了します(Nanoの場合、Ctrl+OEnter、その後に Ctrl+X を押します)。

3. 修正を確認する

では、簡単なコマンドでテストしてみましょう。一瞬で終わるはずです。

sudo true

警告メッセージが表示されずにプロンプトがすぐに戻ってくれば、解決です。

クラウドインスタンスでこれが発生する理由

これはAWS EC2やGoogle Cloudで最も頻繁に見られます。t3.microなどのインスタンスを起動すると、プロバイダーは ip-10-0-0-5 のような内部名を割り当てます。hostnamectl set-hostname を使用して手動で名前を変更すると、システムは /etc/hostname を更新しますが、/etc/hosts は無視されることがよくあります。この不一致が問題の根本原因です。

重要なポイント

  • 常に同期させる: /etc/hostname を変更するたびに、必ず /etc/hosts も更新してください。これらはペアで機能します。
  • Sudoは繊細: Sudoは、セキュリティポリシーが正しく適用されるよう、他のツールよりも厳格にネットワーク解決をチェックします。
  • ループバックを壊さない: 127.0.0.1 localhost のエントリは絶対に削除しないでください。削除すると、重要なシステムサービスやローカルデータベースが動作しなくなる可能性があります。

ネットワーク管理者へのアドバイス

内部ネットワークを拡張したり、サーバーのクラスターに静的IPを割り当てたりする際、小さな命名エラーが大きな悩みの種になることがあります。CIDRブロックを早い段階で再確認することで、こうした「アイデンティティ危機」を防げることに気づきました。

新しいVPCを設計する際、私はToolCraftのサブネット計算機を使用しています。自動化スクリプトにホスト名をハードコードし始める前に、IP範囲が適切かどうかを確認するための迅速な方法です。ブラウザベースでIP構造のプライバシーも守られるため、クイックな整合性チェックに信頼できるツールです。

Related Error Notes