Linuxで sudo
を実行した際に、すぐにパスワード入力画面が出ずに長時間待たされる、あるいはタイムアウトしてしまうことがあります。
単純な権限エラーとは異なり「遅い」という挙動を示すため、原因が分かりづらいケースです。
この記事では、sudo
実行時に遅延やタイムアウトが発生する主な原因と、その解決方法について整理します。

主な原因
1. DNS逆引きの遅延
sudo
はログ出力時などにユーザーのホスト名を確認するため、IPアドレスの逆引きを試みます。
もしDNSサーバーに問題がある、あるいは逆引きが設定されていない場合、問い合わせがタイムアウトするまで処理が止まってしまいます。
2. /etc/sudoers
の設定による遅延
sudoers
ファイルにホスト名ベースの制御が記述されていると、認証時に名前解決が走る場合があります。
特に ALL=(ALL)
のような一般的な指定ではなく、特定のホスト名で制御している環境では、DNSやhostsの不整合で遅延が発生することがあります。
解決方法
1. DNS逆引きを無効化する
/etc/ssh/sshd_config
と同様に、sudo
側でもDNS解決を抑制する設定が可能です。
/etc/sudoers
を visudo
で開き、以下の行を追加します。
Defaults !fqdn
これにより、ホスト名解決が行われず、認証処理が高速化されます。
2. /etc/hosts
に明示的に記載する
逆引きが必要な場合は、サーバーのホスト名とIPアドレスを /etc/hosts
に追加しておくと解決できます。
例:
127.0.0.1 localhost
192.168.1.10 myserver
このように設定しておけば、DNSを経由せず即座に名前解決できるため、遅延がなくなります。
3. sudoers
のホスト名指定を見直す
もし sudoers
に以下のような設定がある場合:
user ALL=(ALL) myserver
これを単純に
user ALL=(ALL) ALL
に変更すれば、ホスト名の名前解決を行わなくなり、処理が軽くなります。
まとめ
sudo
実行時に遅い/タイムアウトする原因は、ほとんどがDNS逆引きの遅延や、ホスト名依存の sudoers
設定にあります。
Defaults !fqdn
を追加して逆引きを無効化する/etc/hosts
にホスト名を登録するsudoers
のホスト名指定を削除・修正する
といった対応で多くのケースは解決可能です。
よくあるエラーと解決方法まとめ
