TTY経由でないsudoの実行

Javaで実装された画面処理から、ファイルシステム上にあるsudoを含むシェルスクリプトをキックする処理を実行したところ、以下のようなメッセージを標準エラー出力に出して処理に失敗した。環境はCentOS 5(RHELでも同様)。


sudo: sorry, you must have a tty to run sudo
sudoの設定としては、visudoコマンドで/etc/sudoers に下記の書式

ユーザ ホスト = (権限) コマンド
例)hoge ALL = (root) /sbin/reboot
で設定を入れ、ファイルを:wqした瞬間に設定が有効になる。が、SSHクライアントやコンソール上での実行以外では前述の「you must have a tty to run sudo」のメッセージで実行できない。これを回避するためには、sudoのデフォルト設定の「Defaults requiretty」を無効化する必要がある。
具体的には、/etc/sudoersから該当行を以下のようにコメントアウトすればよい。

#Defaults requiretty
これで解決。昔はこんな設定を入れなくても動いていたような気がするので、いつからかsudoのデフォルト設定が変わったのかなぁ(ディストリビューションによっても異なるかも)。