Rundeckでリモートサーバに対してsudoを用いた処理をさせたいことがある。 ジョブ実行ユーザ(今回の例だとrundeckユーザ)には鍵認証しか許可させない(+authorized_keysで接続元のIPをRundeckサーバに制限)するなどで接続時のセキュリティは担保できるので、sudo実行時にパスワードはいらない前提とすると、以下のように「/etc/sudoers」に追記してやればよい。 さすがになんでもsudo実行できるとちょっと問題なので、sudoで実行できるプログラムは制限してやればよい。

/etc/sudoers
rundeck ALL=(ALL) NOPASSWD: <sudoで実行を許可するプログラムのpath(カンマ区切り。制限しないならALL)> Defaults:rundeck !requiretty # これがないとttyがないといわれてエラーになる

なお、sudo実行時にパスワード入力が必要な場合、ノードの記述をするとこで「sudo-password-option」とか指定することで一応対応できる(シークレット入力可)ようなのだが、以下の理由で今回はいらないかなと考えた。

  • authorized_keysの設定でアクセス元制限しているから、鍵が漏れてもそのIPアドレスからしかアクセスできない
  • 「/etc/sudoers」でsudo実行できるコマンドを制限してるため、なんでもかんでもsudo実行させることはできない

ジョブ専用ユーザでなく、人間が利用するユーザと併用なら上記のような対応が必要なので、そのうち検証だけしてみようかな。