Javaからsshでsudoを実行する

Javaからsshでとあるサーバーにある「sudo」権限が必要なシェルをキックすると、
こんなエラーが出て実行できませんでした。

sudo: no tty present and no askpass program specified

環境はCentOSの5.5です。


原因は「tty」がないと処理を許容してくれないからでした。
ttyを経由しない場合や、非シェルログインユーザーで「sudo」を実行した場合も同様です。


対応方法としては「sudo」の設定の「Defaults requiretty」項目を無効化する必要があります。
「visudo」コマンドで「sudo」の設定ファイルを開いてコメントアウトします。

#Defaults    requiretty

これで無事にJavaから「sudo」が実行できました。