sudo: sorry, you must have a tty to run sudo の原因と解決方法

  • URLをコピーしました!
目次

エラーの概要

リモートサーバで 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/sudoersrequiretty 設定
  • 最も簡単な解決策は visudoDefaults requiretty を無効化すること
  • セキュリティ要件に応じて「全体」か「特定ユーザー」かを選択する
  • 一時的には ssh -t を活用して回避可能
よくあるエラーと解決方法まとめ
目次