目次
エラーの概要
リモートサーバで sudo
コマンドを実行した際に、以下のようなエラーが出ることがあります。
sudo: sorry, you must have a tty to run sudo
このエラーは、sudo
実行に TTY(端末)接続が必須 という制約が設定されていることが原因です。特に Ansible やスクリプトで sudo
を使うときに多発します。
主な原因
/etc/sudoers
ファイルにDefaults requiretty
が設定されている- TTY を持たない環境(例: cron、CI/CDツール、Ansible など)で sudo を実行している
解決方法
1. sudoers 設定の確認
visudo
を使って /etc/sudoers
を編集します。
sudo visudo
次のような設定があるか確認してください。
Defaults requiretty
これがあると すべてのユーザーが TTY なしでは sudo を実行できなくなります。
2. requiretty の解除
以下のようにコメントアウト、または削除します。
# Defaults requiretty
保存して終了すれば、非対話環境からも sudo
が実行できるようになります。
3. ユーザーごとに制御する場合
セキュリティの観点から、グローバルに無効化したくない場合はユーザーごとに設定できます。
例: 特定のユーザーだけ requiretty を外す
Defaults:deploy !requiretty
4. 一時的な対処(ssh 経由で実行する場合)
SSH 経由で sudo
を使うときに TTY を割り当てれば回避できます。
ssh -t user@server "sudo command"
-t
オプションで TTY を強制割り当てできます。
まとめ
- エラーの原因は
/etc/sudoers
のrequiretty
設定 - 最も簡単な解決策は
visudo
でDefaults requiretty
を無効化すること - セキュリティ要件に応じて「全体」か「特定ユーザー」かを選択する
- 一時的には
ssh -t
を活用して回避可能
よくあるエラーと解決方法まとめ
あわせて読みたい


【完全版】sudoエラー大全|よくある原因と解決方法まとめ
Linux でシステム管理を行う際、sudo コマンドは欠かせない存在です。通常は root 権限を安全に利用するための仕組みですが、環境や設定によってさまざまなエラーが発生…