[CentOS6][SOS JobScheduler] sshでリモート実行するジョブ


Create: 2013/03/11
LastUpdate: 2013/04/26
[ メニューに戻る ]

下図の環境を使用します。
環境の詳細を知りたい場合は、メニューに戻って構築手順を参照してください。


JobSheduler では、JobShedulerAgent を使用しなくても、SSHでプログラムをリモート実行するジョブを定義できます。
ここでは、SSHを使用して Host-AのJOB1(上図)と同じになるようなジョブを定義してみます。定義は以下のようになります。
  • JobSchedulerAgent を使用しないので、JOB1 は MANAGER 上で実行するように定義します。
  • Manager上のJOB1からSSHで、Host-A のプログラムをリモート実行するように定義します。
  • SSH実行時に使用するユーザは誰でもいいのですが、今回は "jobsユーザ" を使用することにします。
手順については、「JobScheduler FAQ」を参考にしました。

1.テストアプリケーションの作成


ジョブで実行するテストアプリケーションとして、Host-A に以下のシェルスクリプトを作成します。
ファイル名は、/tmp/test.sh とします。
#!/bin/sh
echo "test.sh running."
echo "hostname=`uname -n`"
exit $?
以下のように実行権限を付与します。
$ chmod +x /tmp/test.sh

2.SSHの秘密鍵作成(パスフレーズなし)


Manager サーバから SSH でHost-Aに接続してプログラムを実行する際に、パスワード入力を省略できるように、「パスフレーズなしの秘密鍵」を作成します。
Host-A に jobs ユーザでログインします。
以下のコマンドで公開鍵と秘密鍵を作成します。
$ ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/home/jobs/.ssh/id_rsa): <そのままENTER>
Enter passphrase (empty for no passphrase): <そのままENTER>
Enter same passphrase again: <そのままENTER>
Your identification has been saved in /home/jobs/.ssh/id_rsa.
Your public key has been saved in /home/jobs/.ssh/id_rsa.pub.
The key fingerprint is:
fb:f5:77:9e:5b:7a:09:e9:b7:3d:ed:d4:9c:91:82:c1 jobs@centos6y
The key's randomart image is:
+--[ RSA 2048]----+
|                 |
|          .      |
|           E     |
|            o   .|
|        S  . ..o |
|         .   o..+|
|        .   o ..B|
|         . . o *O|
|          .   +OO|
+-----------------+
以下のように秘密鍵と公開鍵が出来上がります。
$ ls -l .ssh
合計 12
-rw------- 1 jobs jobs 1675  3月 12 14:11 2013 id_rsa
-rw-r--r-- 1 jobs jobs  395  3月 12 14:11 2013 id_rsa.pub
-rw-r--r-- 1 jobs jobs  394  2月 20 14:13 2013 known_hosts
公開鍵の id_rsa.pub を authorized_keys ファイルに追加して、属性を設定します。
$ cat .ssh/id_rsa.pub >> .ssh/authorized_keys
$ chmod 644 .ssh/authorized_keys
試しに、秘密鍵で自分自身にSSH接続してコマンド実行してみます。
以下のようにコマンドを実行し、パスワードなしで "pwd" コマンドの実行結果が表示されたらOKです。
SSHでの初回接続時は、接続元のホストを承認するかどうか聞かれるので "yes" と答えます。
承認したホストは ~/.ssh/known_hosts に記録されて、2回目以降は聞かれなくなります。
$ ssh -l jobs -i .ssh/id_rsa localhost pwd
The authenticity of host 'localhost (::1)' can't be established.
RSA key fingerprint is 0b:03:f5:44:f8:ff:1d:d5:eb:57:5f:0b:f7:e8:38:06.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'localhost' (RSA) to the list of known hosts.
/home/jobs
上記のようなSSHのホスト認証を回避して、無条件にホストを承認することもできます。
コマンドライン引数に  -o 'StrictHostKeyChecking=no' をつけます。
試しに、~/.ssh/known_hosts を削除して、もう一度、初回接続してみると、入力プロンプトが表示されません。
$ ssh -l jobs -i .ssh/id_rsa -o 'StrictHostKeyChecking=no' localhost pwd
Warning: Permanently added 'localhost' (RSA) to the list of known hosts.
/home/jobs
known_hosts ファイルに接続元を登録したという意味の Warning メッセージは、2回目以降の接続では表示されなくなります。
以上で、入力プロンプトなしでSSH実行できる準備ができたので、SSHの秘密鍵を Manager サーバに 転送しておきます。
$ scp .ssh/id_rsa jobs@192.168.1.61:/tmp/.


3.ジョブの登録&実行


JOE で以下のように、[Process File]タブを使用してジョブを登録します。
  • [File] ・・・ ssh コマンドのパス
  • [Parameter] ・・・ ssh コマンドの引数


JOCでジョブを  実行 します。
下図のように正常終了すればOKです。


下図は実行結果です。"test_job1_sh" の実行結果が表示され Host-Aのホスト名を確認できます。

SSHでのリモート実行でも、ちゃんと、終了コードを判定します。0以外を返せばジョブのステータスが stopped になります。


■ 補足
上記以外に、JobScheluer の Java アプリケーションを使用したSSHのリモート実行もできるようです。
リモート側プログラムの終了コード判定もしてくれます。
JOE で下図のように "sos.scheduler.job.JobSchedulerSSHJob" クラスを指定します。.


下図のようにパラメータで、接続先とコマンドを指定できます。
この例では、SSHのパスワード認証を使用しています。


下図は実行結果です。