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通りの起動方法と確認方法、また停止方法をご案内いたします。
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サーバーも起動します。
ジョブ記述(JOBD)を作成します。
※この例では、ライブラリー QGPL にジョブ記述 SSHJOBDを作成します。
CRTJOBD JOBD(QGPL/SSHJOBD) USER(QSECOFRと同じ権限のユーザー) RQSDTA('STRTCPSVR SERVER(*SSHD)')
サブシステム QUSRWRKの自動開始ジョブへ登録します。
ADDAJE SBSD(QUSRWRK) JOB(SSHD) JOBD(QGPL/SSHJOBD)
もし、自動開始ジョブから除去する場合には下記コマンドを実行します。
RMVAJE SBSD(QUSRWRK) JOB(SSHD)
QShellから起動する方法
ユーザーQSECOFRを変更したくない場合は、こちらの方法をお試しください。
QSECOFR と同等権限のユーザープロファイルを用意します。
→今回の例では SSH とします。
1-1.ユーザーQSECOFRをコピーして ユーザー SSHを作成します。
→QSECOFRの権限などをそのままコピーします。
- 1-2.
CHGUSRPRF USRPRF(SSH) CCSID(5035) SETJOBATR(*CCSID *DATFMT *DATSEP *DECFMT *SRTSEQ *TIMSEP) LOCALE('/QSYS.LIB/JA_5035.LOCALE')
エミュレータのホスト・コード・ページ(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)
SSHサーバーの起動・接続確認
コマンド:NETSTAT OPTION(*CNN)→ F14 にて、ポート 22が起動していれば、SSHサーバーが起動しています。
コマンド: NETSTAT OPTION(*CNN)
更に 「F14=ポート番号の表示」
もしくは、ジョブ QP0ZSPWTか QP0ZSPWP が起動している事を確認します。
コマンド:WRKACTJOB JOB(QP0ZSPW*)
SSHサーバーが起動し、SSH接続できるかを確認するには下記を実行します。
→ STRQSH
→ ssh ユーザー名@ホスト名SSHサーバーが起動していてログイン成功した例です。
SSHサーバーが起動しておらずログインに失敗した例です。
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 . あすと