Rundeck&Win32-OpenSSHでWindowsのバッチをリモート実行させてみました
こんにちは。インフラ開発部の福本です。
Webサービスの提供を長く続けていると、どうしても継ぎ接ぎで改修が行われていくことも多く、それにあわせてスケジュール登録されるCronやTaskなども煩雑になってきますよね。
開発メンバーが異動でいなくなってしまうと、そもそもどこで何の処理が動いているのか探すだけで1時間、みたいなこともよくあります。
そういったことが続くと、やはりジョブ管理ソフトが欲しくなってくるものです。
ということで、今回はRundeck&Windowsについて検証してみたので、共有してみたいと思います。
Rundeckとは?
ひとことで言うと、オープンソースのジョブスケジューラです。
http://rundeck.org/
マネージャのインストール先はLinuxになりますが、エージェントはLinux・Windowsどちらも対応しているようです。
検証ざっくり構成
Rundeckマネージャ:CentOS 7
Rundeckエージェント:WindowsServer2008R2
ということで、今回はマネージャをインストールし、エージェントとしてWindowsを指定した構成で検証してみました。
(マネージャ・エージェントともにLinuxの構成はよく見かけますし・・・)
Rundeckインストール
最新のユーザーガイドがありましたので、そちらを参考に進めます。(記事執筆時点では、2.6.2が最新でした)
http://rundeck.org/docs/
簡単ガイドでは指定の jar ファイルを起動すればいいとのことですが、さすがにそれでは記事にはならないので。。
ということで、まずはJavaのインストールです。
[code language=”shell”]
yum install java-1.7.0
[/code]
次に、利用ポートの確認です。
そのままプロンプトが返ってくれば(値が表示されなければ)大丈夫です。
[code language=”shell”]
netstat -an | egrep ‘4440|4443’
[/code]
では、Rundeckのインストールです。RPMで入れました。
[code language=”shell”]
rpm -Uvh http://repo.rundeck.org/latest.rpm
yum install rundeck
[/code]
Rundeckセットアップ
インストールが完了したら、まずは起動してみます。
[code language=”shell”]
chkconfig rundeckd on
service rundeckd start
[/code]
お約束ですが、URLがlocalhostに設定されており、アクセスするとlocalhostにリダイレクトされてしまうのでこちらの変更を行います。検証なのでIP指定しました。
/etc/rundeck/rundeck-config.properties
[code]
#grails.serverURL=http://localhost:4440
grails.serverURL=http://(RundeckのサーバIP):4440
[/code]
早速ブラウザでアクセス・・・と思いきや、CentOS7のFirewalldで若干つまずき。。。
気を取り直してアクセス!初期アカウントのadminでログインしてみます。
無事に表示できました。
では、プロジェクトおよびジョブを作成して、ローカルホストでのジョブ実行を行ってみます。
(プロジェクトの作成は割愛します。)
ジョブ作成ではワークフローに従って実行内容を記述するようですが、いろいろなオプションが取れるようですね。今回はコマンドを選んでいます。
ローカルホストでの実行なので、”Execute locally” を指定しておきます。
では、ジョブを作成したので、実行してみます。
実行結果が表示されますね。各タブで詳細をすぐ確認できるのは便利です。
ジョブエラー時のコマンドを定義することもできます。
すでに上述の画面でDefinitionタブ内でエラー処理が書いてあります。
そこで、ありもしない”dates”コマンドを実行させて、メインの処理はエラーとさせておき、エラー処理として定義されたコマンドを続けて実行させてみます。
その結果、ちゃんとエラー処理できてファイルも作成されていました。
[code language=”shell”]
ls -la /tmp/test
-rw-rw-r–. 1 rundeck rundeck 7 2月 8 18:38 /tmp/test
[/code]
WindowsへのSSHインストール・セットアップ
さて、次はWindowsエージェントのセットアップです。
Cygwinが推奨されていますが、せっかくなのでプレリリースされたOpenSSHで検証してみたいと思います。
というわけで、インストールです。
https://github.com/PowerShell/Win32-OpenSSH/releases
ここのZIPファイルをダウンロードして展開するだけで大丈夫なようです。
今回は最新版(2016/2/2版)をCドライブ直下に、OpenSSH-Win64フォルダを作成しました。
セットアップは以下の通り。まずは鍵を作成。
[code language=”shell”]
cd c:\OpenSSH-Win64
ssh-keygen.exe -t rsa -f ssh_host_rsa_key
ssh-keygen.exe -t dsa -f ssh_host_dsa_key
ssh-keygen.exe -t ecdsa -f ssh_host_ecdsa_key
ssh-keygen.exe -t ed25519 -f ssh_host_ed25519_key
[/code]
公開鍵認証を有効にするため、OpenSSHフォルダにある下記コマンドを実行して、OS再起動。
[code language=”shell”]
setup-ssh-lsa.cmd
[/code]
OS再起動完了後、SSHDをサービス登録しました。
OpenSSHフォルダにある下記コマンドを実行してインストールし、必要に応じてスタートアップの種類変更を行います。
[code language=”shell”]
sshd.exe install
[/code]
サービス起動ができるのは便利ですね。
SFTPの設定もできるようですが、今回は割愛します。
エージェント側Rundeck設定
続いて、Rundeckの設定です。
Rundeckを実行するユーザーをWindows上で作成し、.sshフォルダを作成します。
手抜きですが、今回は実行ユーザーとしてRundeckユーザーを作成しました。
で、コマンドプロンプトで、以下のように実行し、.sshフォルダを作成。(GUI上からは作成できませんでした・・・)
[code language=”shell”]
cd C:\Users\rundeck
mkdir .ssh
[/code]
ここに、Rundeckマネージャ内の、Rundeckユーザーの鍵を配置します。
※もちろん、実行ユーザーに応じて変更することになりますが、今回は検証なので。。
/var/lib/rundeck/.ssh/id_rsa.pub → C:\Users\rundeck.ssh\authorized_keys
念のため、SSHでログインできることを確認しておきます。
[code language=”shell”]
ssh -i /var/lib/rundeck/.ssh/id_rsa rundeck@(クライアントIP)
[/code]
WindowsにSSHができるのはちょっと面白いですね。
次にエージェントとなるノードをRundeckマネージャ側に追加します。
プロジェクト単位でノードを構成するようです。
下記XMLの修正が必要で、GUIでの作成はできないようです。
[code]
/var/rundeck/projects/(プロジェクト名)/etc/resources.xml
[/code]
ここの、タグ内に追記していくイメージです。
[code language=”xml”]
<node name="(RundeckのGUIで表示させる名前)" description="(コメント) tags="" hostname="(IPもしくはホスト名)" osArch="Intel64" osFamily="Windows" osName="WindowsServer2008" osVersion="R2" username="rundeck"/>
[/code]
osFamilyやosVersionなどの項目は、GUI上でノードを検索するときに使うようですが、他にもあるかもしれません。
では、ジョブ作成です。
違いは簡単、コマンド定義をWindowsに合わせること、実行先ノードを”Dispatch to Nodes“とし、検索して指定する必要があります。
Node Filterでの指定が若干慣れが必要になる部分かと思いますが。。
今回は簡単なバッチファイルをエージェント側に作成し、Remoteでジョブを実行してました。
ご覧のとおり、問題なく実行完了できました!
上述のSSH疎通確認の時点で半分以上成功のようなものですが。。。
ちなみにファイル作成者はrundeckになっていましたので、SSHで関連付けたWindowsアカウントで実行されているようです。
運用にあたっての課題
なかなかいい感じのRundeckですが、現時点で疑問・課題も見えてきました。
- 複雑なジョブフローは組めるのか?
(エラー処理はできるみたいですが、JP1みたいにファイル監視で処理続行などできると嬉しい) - Windowsドメインアカウントでリモート実行できるのか?
(おそらく大丈夫だと思いますが、検証はしないと・・・) - ノードやプロジェクトの効率的な管理方法
- Rundeckマネージャサーバの冗長構成
- GUIの日本語正式対応(オペレーション移管の観点)
などが思いつくところです。そもそも機能把握が先ですが。。。
ただ、非常に機能豊富なソフトウェアですので、引き続き検証していきたいと思います。
参考サイト
http://note.crohaco.net/2015/rundeck-basic/
http://dev.classmethod.jp/server-side/server/try-rundeck-job/
https://github.com/PowerShell/Win32-OpenSSH/wiki

関連記事
-
-
【クラウド初心者向け】Google Cloud Platform(GCP)でWebサイトを公開してみよう!
はじめに みなさんこんにちは、プロダクト開発本部の亀梨です。 普段はXmediaOneというメディアプランニング・広告運用管理・トラッキング・マーケティング分析を行う 統合プラットフォームの開発を担当しています。 背景 わたくしは最近プライベートで開発したWebサービスをインターネット上に公開しまし …
-
-
GoogleスプレッドシートからTreasureDataへデータを取り込む
AudienceOneの開発を担当しています。skryoです。 またまたTreasureDataネタですが、今回はGoogleスプレッドシートからGoogleAppsScriptを使ってTreasureDataへデータを取り込む手順を紹介したいと思います。 なぜ? Googleスプレッドシート上でマ …
-
-
Vagrantの機能を使って開発環境の効率をあげてみた。
プラットフォーム・ワンのシステムの運用・保守担当のエンジニアです。 保守の仕事に関わると、 ユーザからのお問い合わせだったり、監視アラートによる検知から システムを調査することがあります。 ログとソースコードを見て、不具合を特定し改修する。 すぐできればカッコいいですが、 「本番環境に反映して別のエ …
-
-
Selenium × PHP でテスト自動化!【環境構築編】
はじめに みなさんこんにちは、プロダクト開発本部の亀梨です。 普段はXmediaOneというメディアプランニング・広告運用管理・トラッキング・マーケティング分析を行う 統合プラットフォームの開発を担当しています。 テスト自動化の背景 わたくしが担当するXmediaOneでは品質担保のために①コードベ …
-
-
ActiveDirectoryをフォレスト間で移行する(その2)
こんにちは。インフラ開発部の福本です。 2015年も残り約半分ですね。ボーっとしていると、あっという間に日々が過ぎていきます。 その中、少しずつ迫るWindowsServer2003のサポート期限。 保守切れとなるサーバOSの移行に忙殺されているサーバ管理者の方も、いらっしゃるのではないでしょうか。 …
-
-
slack×Nagiosでアラートをプッシュ通知
DACではサーバ・NW機器のリソースの監視に「Nagios」を利用してます。 監視ホストも数百台規模で増え続けており、アラート検知が非常に重要な課題となってきています。 メールの通知では、各MLを通知先に設定して、フィルタ分けして…と何かと面倒ですね。 そこで「slackへアラート内容を …
-
-
Qiita Team API と Google Spread Sheet でチーム日報を生成する
チーム日報を活用する MarketOne 開発チームでは複数拠点に分かれての開発を行っています。リモート開発が中心となると口頭でのコミュニケーションに限界があるため、テキストベースのコミュニケーションの比重が高い状態にあります。 チケットシステムやソースコード管理ツール上の議論はもちろんおこなってい …