Rundeck には Secondary Sudo Password Authentication というのがあって、
リモートノードに SSH した後の sudo で必要になるパスワードを設定することができます。
"sudo -u otheruser /sbin/some-command" ってやつです。
ローカルコマンドを実行する際にもココに書かれている方法で sudo のパスワードが指定できるかと思ったのですが、、、
secondary ぢゃないから無理のようです。
試行錯誤の末、なんとかやり方は見つけたのでメモを残しておきます。
環境
- Rundeck 2.6.1
- CentOS 6.6
sudo のための準備
RPM パッケージからインストールすると、Rundeck の実行ユーザーは rundeck
になります。
まずは rundeck
ユーザーを sudoers へ追加し、
(このユーザーアカウントには パスワードが設定されていませんので・・・ )パスワードを設定します。
とりあえずパスワードは hogemoge-2828 にしたとしましょう。
また、環境によっては以下の設定などが必要になったりします。
Defaults:rundeck !requiretty
Job Option で sudo パスワードを設定
こんな感じで Job Option を追加します。
- Job Name - 任意の名前(
sudoPassword
である必要はありません) - Default Value -
rundeck
ユーザーアカウントに設定したパスワード(省略すると Job 実行のたびにパスワード入力が必要になります) - Input Type - Secure を選択
- Required - 必須なので Yes を選択
最下部 Usage がポイントです。
Workflow で sudo パスワードを指定
前述の Usage で、追加した Job Option の値を参照することができます。
root
ユーザーとして whoami するだけのサンプルで試してみます。
Command
Node Steps で Command を選択した場合は以下の通りです。
Bash:
echo $RD_OPTION_SUDOPASSWORD_HOGEMOGE_2828 | sudo -S whoami
Commandline Arguments:
echo ${option.sudoPassword_hogemoge-2828} | sudo -S whoami
Script / Script file or URL
Script もしくは Script file or URL を選択した場合もほぼ同じです。
Script Content:
echo @option.sudoPassword_hogemoge-2828@ | sudo -S whoami
実行結果
その他
Local Command だとダメです。
Job Option の参照は ${option.sudoPassword_hogemoge-2828}
でイケますが、パイプラインなどが解釈されず、以下のようなログが出力されてしまいました。
単なる echo になってますね・・・。
rundeck | sudo -S whoami
LocalExecNodeStepPlugin では対応していないんですかね。
ソースコードを読めばわかるかもしれません。
うむ。イマイチですな・・・
無理やり sudo パスワードを指定できるようにしましたが、
rundeck
ユーザーのパスワードを Job ごとに設定 or 変更しなければならないなんて苦痛でしかありません。
NOPASSWD はチョットドウナンダロウ・・・とか思っていたのに、むしろコッチのほうがセキュリティリスク高くないですかね。
Key Storage が使えないのはかなり痛いです。
これならパスワードなしでもいいかなー