IBM iのSSH設定その2
IBM i(※以下AS/400)のSSHサーバーの設定が終わったので、デーモン実行コマンドの作成と、SSHデーモンをサブシステムに登録をします。
こういう設定も1度やってしまうと、暫くする事は無く、忘れやすいのでしっかりメモです。
V6R1の場合は、”STRTCPSVR””ENDTCPSVR”コマンドの引数に”*SSHD”が用意されているので、それを起動するだけになると思います。これよりは、V5R4又はV5R3が対象となります。
AS/400のサブシステムの作成方法は割愛します。(処理単位にサブシステムを分けるべきか、ある程度まとめるべきは、悩むところです)
自分の環境では、MySQLデーモンが動いている”OPENSYS”という名前のサブシステムが、有るのでそこにSSHデーモンも放り込むことにしました。
SSH DaemonのプロセスIDをファイルに書き出す
- ”/QOpenSys/QIBM/UserData/SC1/OpenSSH/openssh-3.5p1/etc/sshd_config”に、次の様にを追加する。
# Write Process id (pid) to a file (2009.09.08 by ushiday) PidFile /var/run/sshd.pid
- ”MKDIR”コマンドで、プロセスid出力用のディレクトリ”/var/run”を作成する。
- 「sshd」を起動して、プロセスidのファイルが正しく出力されているか確認する。
SSH Daemonを開始するCLPを作る
- デーモンの開始CLPを以下の様に作成します。CLPは”OPENLIB”というライブラリに作る事にします。
/*********************************************************************/ /* STRSSHD : SSH デーモン開始 */ /* 2009/09/08 WRITE BY ushiday */ /*********************************************************************/ /* 変数定義 */ /*********************************************************************/ PGM DCL VAR(&CMD1 ) TYPE(*CHAR) LEN(60) /* PASE COMMAND */ DCL VAR(&NULL ) TYPE(*CHAR) LEN(1) /* NULL */ DCL VAR(&CCSID ) TYPE(*DEC) LEN(5 0) /*元CCSID */ RTVJOBA CCSID(&CCSID) CHGJOB CCSID(5035) /*デーモン開始*/ CHGVAR VAR(&CMD1) + VALUE('/QOpenSys/usr/sbin/sshd' *TCAT &NULL) QSH CMD(&CMD1) CHGJOB CCSID(&CCSID) END: RETURN ENDPGM
始めは「call qp2shell」を使ったのですが、権限がないとエラーが出てしまい駄目だったので、解説どおり「qsh」を使って実行したらOKでした。
SSH Daemonを終了するCLPを作る
- デーモンの終了CLPを以下の様に作成します。こちらは、サブシステムで使うわけではなく、手動で停止や再起動をさせるためのものです。
/*********************************************************************/ /* ENDSSHD : SSH デーモン終了 */ /* 2009/09/08 WRITE BY ushiday */ /*********************************************************************/ PGM DCL VAR(&CMD1 ) TYPE(*CHAR) LEN(60) /* PASE COMMAND */ DCL VAR(&CMD2 ) TYPE(*CHAR) LEN(60) /* PASE COMMAND */ DCL VAR(&NULL ) TYPE(*CHAR) LEN(1) /* NULL */ DCL VAR(&CCSID ) TYPE(*DEC) LEN(5 0) /*元CCSID */ RTVJOBA CCSID(&CCSID) CHGJOB CCSID(5035) /* PASEコマンドとパラメータの末尾にはNULLが必須*/ CHGVAR VAR(&NULL) VALUE(X'00') /*コマンドの設定*/ CHGVAR VAR(&CMD1) + VALUE('/QOpenSys/usr/bin/ksh' *TCAT &NULL) /*デーモン終了*/ CHGVAR VAR(&CMD2) + VALUE('kill $(cat /var/run/sshd.pid)' *TCAT &NULL) CALL PGM(*LIBL/QP2SHELL) PARM(&CMD1 &CMD2) CHGJOB CCSID(&CCSID) END: RETURN ENDPGM
SSH用のジョブ記述を作成する
- ジョブ記述を”CRTJOBD”で作成します。その時、前述で作成した”OPENLIB/STRSSHD”を、要求コマンドとして設定します。
/* SSHジョブ記述作成 */ CRTJOBD JOBD(OPENLIB/SSHD) JOBQ(OPENLIB/OPENSYS) + TEXT('SSHD JOBD') USER(SSHUSER) + RQSDTA('QSYS/CALL OPENLIB/STRSSHD')