プロジェクトでジョブスケジューラーが必要になり、噂のRundeckを試してみようと、とりあえず Vagrant 上の CentOS をリモートホストにみたてて Hello World! とか気楽に考えてたら異常にハマったので記念に。
バージョン
Rundeck: rundeck-launcher-2.5.3.jar
ノードの設定
今回は jar ファイル起動でプロジェクト名は「demo」という名前にしてます。設定ファイルは RD_BASE/projects/demo/etc/resources.xml
になります。
<node name="node1" description="test node" tags="" osArch="x86_64" osFamily="unix" osName="CentOS" osVersion="6.5" hostname="192.168.28.100" username="vagrant"
ssh-keypath="/Users/hogemoge/.ssh/id_rsa"
ssh-authentication="privateKey"
ssh-password-option="option.sshKeyPassphrase" />
アドホックコマンドでは利用できない
クライアント側の公開鍵をリモート側の authorized_keys に追記してコマンド実行を試してみたんですが、見事に AuthenticationFailure になります。
で、Rundeck ドキュメント(2.5.3)/ ユーザーマニュアル / プラグイン に以下のような記載がありました。
さらに秘密鍵パスフレーズ認証にはいくつかの必要事項と制限があります:
- 秘密鍵認証にてパスフレーズを要求するノードには予め定義されたジョブを通してのみ実行が可能です。アドホックコマンドでは実行できません。(今のところ)
- そのようなノード上で実行される各ジョブには実行前にパスフレーズを入力してもらうようセキュアオプションの定義がされていなければなりません。
- 秘密鍵パスフレーズ認証を使う全てのノードでは入力するパスフレーズと定義されたセキュアオプション定義とがマッチする必要があります。または同じパスフレーズを共有して使う場合は同じ Option 名(またはデフォルトのまま)を使う必要があります。(例えば、同じ秘密鍵を共有して使う場合など)
いやぁ・・・全然気がつきませんでした。正直、ここだけでもかなりの時間を失ったのですが。
- 秘密鍵認証にてパスフレーズを要求するノードには予め定義されたジョブを通してのみ実行が可能です。アドホックコマンドでは実行できません。(今のところ)
一応、英語の方ですが、何度も何度も読んでましたよ。理解してんのかっつう話です。
Therefore Private Key Passphrase authentication has several requirements and some limitations:
- Private Key-authenticated nodes requiring passphrases can only be executed on via a defined Job, not via Ad-hoc commands (yet).
ジョブの設定
ジョブについてもユーザーマニュアルにいろいろ書かれてますが、XMLしか例がないので GUI でどうしたらいいのか分かりませんでした。
とりあえず、こうします。
OptionName
は何でもいいんじゃないかと思うんですが、マニュアルに以下のように書かれていて、
オプションの定義
secureInput
にtrue
をセットします。このオプション名(ここでいうsecureInput
)は自由に決めて構いませんが、ノードの設定でデフォルト値として使われているsshKeyPassphrase
を使うのが一番簡単です。
とりあえず何の事か分からないけれど、 sshKeyPassphrase を使うのが一番簡単です って耳元で囁かれたような気がしたので sshKeyPassphrase
にしてます。
Input Type
は Secure Remote Authentication にして、Required
を Yes にします。そーすると、ジョブを実行する際にパスフレーズを入力するトコがイイ感じに出てきます。
ここにパスフレーズ打って Run Job Now です!
夢にまで見た Succeeded!諦めかけてた COMPLETE 100% です!!
ひゃっほおーーー!!
ちなみにプロジェクトで使用する場合、秘密鍵にパスフレーズは設定しません。