ushidayの日記

主に「IBMi」のメモに・・・

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')           
                                                                     
SSH Daemonをサブシステムに自動開始ジョブに登録する
  • ”ADDAJE”でサブシステムの自動開始ジョブとして、前述のジョブ記述”OPENLIB/SSHD”登録。
/*  自動開始ジョブ項目の追加 */                                      
            ADDAJE SBSD(OPENLIB/OPENSYS) JOB(SSHD) JOBD(OPENLIB/SSHD)
SSHデーモンの動作確認
  • ”STRSBS”でサブシステムを起動して、WRKACTJOBでSSHDの動作とクライアントからの接続を確認します。