メニューボタン
サポートチーム便り2025.06.25

IBM i のSSHサーバーを起動する方法を教えてもらえませんか?

Question

VsCodeの拡張機能Code for IBM i を利用したいのですが、ネットで調べたところ、SSH接続が必要とのことでSTRTCPSVR SERVER(*SSHD)でサーバージョブの開始を試みましたが起動しませんでした。

SSHサーバーを起動する条件や設定などを教えていただけますでしょうか。

Answer

まずSSHサーバーを起動(使用)する場合には、下記ライセンス・プログラムが必要となります。

5770SS1 オプション 30 QSHELL
5770SS1 オプション 33 PORTABLE APP SOLUTIONS ENVIRONMENT
5733SC1 *BASE IBM PORTABLE UTILITIES FOR I
5733SC1 オプション 1 OPENSSH, OPENSSL, ZLIB

このライセンス・プログラムがインストール済かを確認するには下記手順になります。

確認方法 : GO LICPGM →「10.導入済みライセンス・プログラムの表示 」→「 F11=リリースの表示」→「F11=オプションの表示」

次に、SSHサーバーは、ジョブのCCSIDが5035で起動する必要があり、CCSIDが5035以外で起動しようとすると異常終了して起動しません。

日本語環境をお使いのシステムである場合、CCSIDの値が65535(5026)になっている場合が多く、起動させるためにはCCSID の値を5035で使用する必要があります。

以下では、2通りの起動方法と確認方法、また停止方法をご案内いたします。

  1. STRTCPSVR SERVER(*SSHD)で起動する方法
  2. QShellから起動する方法
  3. SSHサーバーの起動・接続確認
  4. SSHサーバーの終了方法

  1. STRTCPSVR SERVER(*SSHD)で起動する方法

    コマンド:STRTCPSVR SERVER(*SSHD)は、内部でユーザーQSECOFRを使用します。

    ユーザーQSECOFRの設定を変更していい場合は、こちらの方法をお試しください。

    • ユーザーQSECOFRのCCSIDを5035に設定します

       CHGUSRPRF  USRPRF(QSECOFR)  CCSID(5035)
                   SETJOBATR(*CCSID *DATFMT *DATSEP *DECFMT *SRTSEQ *TIMSEP)
                   LOCALE('/QSYS.LIB/JA_5035.LOCALE')

    • SSHサーバーを開始します

       STRTCPSVR SERVER(*SSHD)

    SSHサーバーは、サブシステムQUSRWRK配下で稼働するため、サブシステム QUSRWRKを終了すると、SSHサーバーも終了してしまいます。

    SSHサーバーを常に使用できるようにしたい場合は、QUSRWRKの起動後に、SSHサーバーを再起動する必要があります。

    以下に、それらを自動開始するように組み込む方法をご案内します。

    (SSHサーバーを自動開始する方法)

    STRSBS SBSD(QUSRWRK)実行後に、STRTCPSVR SERVER(*SSHD)を実行することで起動できますが、サブシステム QUSRWRKの「自動開始ジョブ」として登録する事もできます。

    → 自動開始ジョブへ登録すると、QUSRWRKを開始するとSSHサーバーも起動します。

    1. ジョブ記述(JOBD)を作成します。

      ※この例では、ライブラリー QGPL にジョブ記述 SSHJOBDを作成します。

            CRTJOBD   JOBD(QGPL/SSHJOBD)  USER(QSECOFRと同じ権限のユーザー) 
               RQSDTA('STRTCPSVR  SERVER(*SSHD)')
    2. サブシステム QUSRWRKの自動開始ジョブへ登録します。

             ADDAJE  SBSD(QUSRWRK)  JOB(SSHD)  JOBD(QGPL/SSHJOBD)
    3. もし、自動開始ジョブから除去する場合には下記コマンドを実行します。

         RMVAJE SBSD(QUSRWRK) JOB(SSHD)  


  2. QShellから起動する方法

    ユーザーQSECOFRを変更したくない場合は、こちらの方法をお試しください。

    1. QSECOFR と同等権限のユーザープロファイルを用意します。

      →今回の例では SSH とします。

      1. 1-1.ユーザーQSECOFRをコピーして ユーザー SSHを作成します。

        →QSECOFRの権限などをそのままコピーします。

      2. 1-2.
         CHGUSRPRF  USRPRF(SSH)  CCSID(5035)
                SETJOBATR(*CCSID *DATFMT *DATSEP *DECFMT *SRTSEQ *TIMSEP)
               LOCALE('/QSYS.LIB/JA_5035.LOCALE') 
    2. エミュレータのホスト・コード・ページ(HCP) 939、上記で作成したユーザープロファイル SSH でサインオンし、下記コマンドを実行してください。

              QSH CMD('/QOpenSys/usr/sbin/sshd')

      → SSHサーバーが起動します。

    SSHサーバーを自動開始させる場合の登録例は以下です。

    (SSHサーバーを自動開始する方法・・・バッチ投入)

      SBMJOB CMD(QSH CMD('/QOpenSys/usr/sbin/sshd'))
                   JOBQ(QUSRNOMAX)
                   USER(SSH)
                   CCSID(*USRPRF)

    を QSTRUPPGM に組み込むか、スケジュールに入れてください。

    (SSHサーバーを自動開始する方法・・・ジョブ記述の作成・組み込み)

    • ジョブ記述の作成

            CRTJOBD JOBD(QGPL/SSHDJOBD)
                           RQSDTA('SBMJOB CMD(QSH CMD(''/QOpenSys/us/sbin/sshd'')) JOBQ(QUSRNOMAX) USER(SSH) CCSID(*USRPRF)')

    • ジョブ記述をサブシステムに登録

            ADDAJE SBSD(QUSRWRK) JOB(SSHD) JOBD(QGPL/SSHJOBD)

    • もし、自動開始ジョブから除去する場合には下記コマンドを実行します。

               RMVAJE SBSD(QUSRWRK) JOB(SSHD)


  3. SSHサーバーの起動・接続確認

    コマンド:NETSTAT OPTION(*CNN)→ F14 にて、ポート 22が起動していれば、SSHサーバーが起動しています。

    コマンド: NETSTAT OPTION(*CNN)

    更に 「F14=ポート番号の表示」

    もしくは、ジョブ QP0ZSPWTか QP0ZSPWP が起動している事を確認します。

    コマンド:WRKACTJOB JOB(QP0ZSPW*)

    SSHサーバーが起動し、SSH接続できるかを確認するには下記を実行します。

    → STRQSH
    → ssh ユーザー名@ホスト名

    SSHサーバーが起動していてログイン成功した例です。

    SSHサーバーが起動しておらずログインに失敗した例です。


  4. SSHサーバーの終了方法

    SSHサーバーを終了する時には、ENDTCPSVR SERVER(*SSHD) を実行してください。


昨今ではFFRPGも広がり始め、FFRPGで開発する要件も出てきているかと思います。

IBMのツールとしてはRational Developer for i (RDi)もありますが、有償ということもありますので、まずは無償のVS Code + Code for IBM iを選択されるお客様もいらっしゃると思います。

またVS Code以外でも、FTP通信をSFTP通信に変更される要件も、今後出てくるかもしれませんので、SSHサーバーの起動方法は確認しておいたほうがいいかもしれませんね。

by . あすと

あわせて読みたい記事

PAGE TOP