Chef、Capistrano、ansibleを触ったことがある人なら誰もが通る道。
いざ実行すると失敗するアレである。
デフォルトでttyなしのsudoは拒否
デフォルトでttyなしの sudo が許可されてないことが多いので、なるべくしてそうなる。
ssh で sudo 付きコマンドを実行されるのを防ぐとかなんとか…
/etc/sudoers
Defaults requiretty
ユーザ別許可設定
上記の設定をコメントアウトしてしまう手もあるが、ノーガード感があるので却下。
そもそもrootでのssh接続なんて許可してないし、rootなのにsudoがどうとか小さい話じゃないか、
という気がしてきたのでrootだけ許可してみた。
ユーザ指定の書き方はこう↓
/etc/sudoers
Defaults requiretty
Defaults:root !requiretty
グループも同じ↓
/etc/sudoers
Defaults requiretty
Defaults:%wheel !requiretty
コマンド別許可設定
ちなみにコマンド別の拒否設定はこう↓
/etc/sudoers
Defaults requiretty
Defaults!/path/to/command !requiretty
参考
AWS OpsWorksではこうしてた。
1行目でコマンドをリストして、2行目でまとめて !requiretty
してるように見える。
/etc/sudoers.d/opsworks-agent
aws ALL=NOPASSWD:/opt/aws/opsworks/current/bin/chef_command_wrapper.sh, /opt/aws/opsworks/current/bin/chef-client, /opt/aws/opsworks/current/bin/opsworks-agent-uninstaller
Defaults:aws !requiretty
大幅な編集リクエスト求む。