FTP クライアントとして SFTP を使用する MFFTP

セキュア FTP (SFTP) は、メインの MFFTP プログラムで PuTTY SFTP の実装をシェルアウトして呼び出すことで実現します。

これは、FTPS (SSL/TLS を使用する FTP) ではなく、FTP over Secure Shell (SSH) です。

前提条件

PuTTY ツールセットをインストールしてパスを通す必要があります。

具体的には、PuTTY SFTP の実行可能ファイル psftp.exe が必要です。

これらのユーティリティは、ここからダウンロードできます。

証明書ベースの承認を使用する場合は、証明書を使用できる必要があります。これを実現するためのプロセスについては、PuTTY のマニュアルを参照してください。

構成

次の制御変数を構成する必要があります。

MFFTP_CLIENT=SFTP
FTP クライアントとして PSFTP を使用するように MFFTP プログラムを構成します。
MFFTP_SFTP_AUTH=n

認証に使用する成果物を次のように決定するために使用します。

4 つの各変数には、値が次のように割り当てられています。

1 – ユーザー ID

2 – パスワード

4 – 証明書

8 – パスフレーズ

次のように必要な値を加算して、認証に使用する要素を取得します。

1 - ユーザー ID のみ

2 - パスワードのみ

3 - ユーザー ID とパスワード

4 - 証明書のみ

5 - 証明書とユーザー ID

6 - 証明書とパスワード

7 - 証明書とユーザー ID とパスワード

8 - 無効 (パスフレーズを持つには証明書が必要)

9 - 無効

10 - 無効

11 - 無効

12 - 証明書とパスフレーズ

13 - 証明書とパスフレーズとユーザー ID

14 - 証明書とパスフレーズとパスワード

次の DD 定義で承認パラメーターを構成できます。

  • //SFTPAUTH DD .....

    次のパラメーターが有効です。<> 内のテキストを正しい値に置き換えてください。

    machine <マシン名>
    セッションのために接続するマシン名。
    user <ユーザー名>
    ログインに使用するユーザー名。
    pass <パスワード>
    keypcn <ppk 証明書ファイルのパス>
    オプション。証明書認証を使用する場合にのみ指定します。カタログで管理されたデータセット内に証明書を格納して後述の SFTPPPK DD で使用することをお奨めします。
    keypass <ppk 証明書で使用するパスフレーズ>
    オプション。証明書およびパスフレーズ認証を使用する場合にのみ指定します。
    hostkey <接続するマシンの特定のホスト キー>
    これはオプションです。指定しない場合、このホスト キーはマシンのホスト キー ストアに存在する必要があります。詳細については、PuTTY のマニュアルを参照してください。
  • //SFTPPPK DD ....SFTP サーバーへの接続に使用する ppk 証明書が含まれます。証明書をディスク上のどこかに格納する方法よりもこの格納方法をお奨めします。

FTP.DATA というデータセットで制御変数を構成し、FTP.PRIV.DATA というデータセットに ppk 証明書を配置する JCL の例

//SETUP02 JOB 'FTP.DATA',MSGCLASS=X,CLASS=A,MSGLEVEL=(1,1)
//*--------------------------------------------------------
//DEL     EXEC PGM=IEFBR14
//DEL1    DD DSN=FTP.DATA,SPACE=(TRK,1),DISP=(MOD,DELETE)
//DEL2    DD DSN=FTP.AUTH.DATA,SPACE=(TRK,1),DISP=(MOD,DELETE)
//DEL3    DD DSN=FTP.PRIV.DATA,SPACE=(TRK,1),DISP=(MOD,DELETE)
//*==========================================================
//*       FTP.PRIV CONFIGURATION FILE
//*==========================================================
//DEFPRIV  EXEC PGM=IEBGENER
//SYSPRINT DD SYSOUT=*
//SYSIN    DD DUMMY
//SYSUT1   DD *
PuTTY-User-Key-File-2: ssh-rsa
Encryption: aes256-cbc
Comment: slesz1 
Public-Lines: 6
AAAAB3NzaC1yc2EAAAABJQAAAQEAmTd1uLtTsQ6RoyTuhzr3VxFBa0zAK7p91XbQ
sa1NRh9lcVs8zeI3xOzNfW4fyTAe4YUyLCxF0dSXTChDvJtqNeNa9bXiY/noTzc8
WmnWklGzOI+JoxLGIfFvzEN/LjxkB3Tzmc5ESsLLC/xTJrvcuCw/H5Wbh377xaKH
6S4NfXCtaYxWJ3vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv0MRfH15y8DqF9bWhOP6
ywmZAmIZqJeL+0cgeGFtADiV7DSGSrMyEvKayh1OTTRpgebJ40fFaqWvPW6D5yQW
LafvaQLh+OIuMc9iAUwhoetw7VNBLekIFUvwtpS6Pdrs98f0ZQ==
Private-Lines: 14
Wo+ACSDjbOHFd3XXSaYI+meJ5wgJklTLIRjYzJe6QB3bRelm0iSdPTo+lJ8Gtn0u
7mXHsszk0hXAtkv1nWAVPYszk5tk+kY/zuT9YVRp03nwsuW/WQkofNAn5C205/sC
WfvlklaYIBe5FBVmVUYu+p4FzTJYmshZDqMRLYGougB8LLI8knlRfmJn3jgjWR3Z
yRS7XIzgBExy+NX6dyv6UA1mWHU2kV22ao7NBot9M9p2BrVh8NTyYwc4SDz238H9
JIV50m+BZkmZLhRHUokABY3DwAzDQnQHMRFLJ8rOFkPw4WfrJHyy9Do1wU5PlqJ/
SF7FSpTVlzilP7aI5mzexdrXs5WZtxJ5wDvSHTUmtcQSh2YDLxAZf4IPavHsD+eM
nJh4AsU8Pvd4Op5ONPBJY1xrCdQ0AtfrvudFWjPlLJgm8901wo7Mzokbk3ys5sR+
IVu6FWCBk9iN+0KLLPxxxxxxxxxxxVmVzUK8AtbWkBr01bFSAbHiLgnwm1M4LwJz
r1vY96CrBGEfj7wCKeaFmw7FIvc1r8n3WyYcmUfiv0WqZeuBX+yb90QwxzarQBuD
Cbn7hgXgQq6ckE2BerhpM8TRpa2xHk5t0ACrZNyOIrfyRs6E+Bk6dmseMqWJYdRb
7lqdHH6smXW/fMLMurFv0P4WX7f4IPF4OrBG3CoJ3rBCTFXa6/+RaUjaC0/RKUtu
n09m8WLdxVemHhlrg99NQmLx9JEUSr+GbiriAgj5bdppZB5Niz3YiKodZVtcH3ow
90rND6pMrKF/Fs6Zkt7Oxf8bIX3yzs7dpq9OqWU0AuyS5oMwtyMdBjmDrTBEumoF
tKtHuQxX95/TXOJasCaMNRCb1RmGo7bbzo00Xjiq0UHj/fDZuGg9E1Dm2oXYGxg8
Private-MAC: 54aba03aff3cd77f65335b92b6a72df08034462b
/*                                     
//SYSUT2  DD DSN=FTP.PRIV.DATA,SPACE=(TRK,1),UNIT=SYSDA,
//        DCB=(RECFM=LSEQ,LRECL=80),DISP=(NEW,CATLG)
/
//*==========================================================
//*       FTP.AUTH CONFIGURATION FILE
//*==========================================================
//* keypcn d:\util\putty\keys\slesz11-3private.ppk 
//DEFAUTH  EXEC PGM=IEBGENER
//SYSPRINT DD SYSOUT=*
//SYSIN    DD DUMMY
//SYSUT1   DD *
machine slesz1 user fred pass password
keypass slesz1ABCDEF 
hostkey 12:03:da:81:ea:49:6d:96:ed:6f:46:eb:84:27:4d:12 
/*                                     
//SYSUT2  DD DSN=FTP.AUTH.DATA,SPACE=(TRK,1),UNIT=SYSDA,
//        DCB=(LRECL=80,RECFM=FB,DSORG=PS),DISP=(NEW,CATLG)
/
//*==========================================================
//*       FTP.DATA CONFIGURATION FILE
//*==========================================================
//DEFFTP   EXEC PGM=IEBGENER
//SYSPRINT DD SYSOUT=*
//SYSIN    DD DUMMY
//SYSUT1   DD *

; ---------------------------------------------------------------------
; MFFTP SETTINGS
; ---------------------------------------------------------------------

MFFTP_ABCODE 3085 ; SET DEFAULT ABEND CODE FOR MFFTP

MFFTP_OUTPUT_LRECL 120

MFFTP_PREFIX=Y
MFALLOC_LOC d:\temp\j1
;MFFTP_VERBOSE_OUTPUT ON
;MFFTP_KEEP_IP Y
;MFFTP_KEEP Y
MFFTP_CLIENT=SFTP
MFFTP_SFTP_AUTH=13
..... and so on 


/*                                     
//SYSUT2  DD DSN=FTP.DATA,SPACE=(TRK,1),UNIT=SYSDA,
//        DCB=(LRECL=80,RECFM=FB,DSORG=PS),DISP=(NEW,CATLG)
//
SFTP を利用して FTP を使用する JCL の例
//MFFTP05  JOB 'MFFTP TEST',CLASS=A,MSGCLASS=A
//* sftp flavour .
//*
//* Delete files
//*
//DEL1  EXEC PGM=IDCAMS
//SYSPRINT DD SYSOUT=*
//SYSIN    DD *
 DELETE MFI01.MFFTP.FBFILE.TOUPLD FORCE
 DELETE MFI01.FTPDATA.FBFILE FORCE
 DELETE MFI01.MFFTP.GDG FORCE
 SET MAXCC=0
/*
//*
//* Allocate GDG base
//*
//ALLOC  EXEC  PGM=IDCAMS
//SYSPRINT DD  SYSOUT=*
//SYSIN    DD  *
  DEFINE  GDG -
         (NAME(MFI01.MFFTP.GDG) -
          LIMIT(5) -
          NOEMPTY -
          SCRATCH)
/*
//*
//* Create an FB/10 dataset
//*
//STEP0 EXEC PGM=IEBGENER
//SYSPRINT  DD SYSOUT=*
//SYSIN     DD DUMMY
//SYSUT1    DD *
AAAAAAAAAA
BBBBBBBBBB
/*
//SYSUT2    DD DSN=MFI01.MFFTP.FBFILE.TOUPLD,
//             DISP=(NEW,CATLG,DELETE),
//             DCB=(RECFM=FB,LRECL=10)
//*
//* Upload an MVS dataset
//*
//STEP1 EXEC PGM=MFFTP,PARM='slesz11-3.microfocus.com'
//SYSOUT DD  SYSOUT=*
//OUTPUT DD  SYSOUT=*
//SFTPAUTH DD DSN=FTP.AUTH.DATA,DISP=(SHR)
//SFTPPPK  DD DSN=FTP.PRIV.DATA,DISP=(SHR)
//INPUT  DD *
cd MFFTP_TEST
mkdir machine_os
cd machine_os
put MFI01.MFFTP.FBFILE.TOUPLD MFFTP01.txt
quit
/*
//*
//* Download a text file to an MVS dataset (FB/10)
//*
//STEP2 EXEC PGM=MFFTP,PARM='slesz11-3.microfocus.com'                                                    
//SYSOUT DD  SYSOUT=*
//OUTPUT DD  SYSOUT=*
//SFTPAUTH DD DSN=FTP.AUTH.DATA,DISP=(SHR)
//SFTPPPK  DD DSN=FTP.PRIV.DATA,DISP=(SHR)
//INPUT DD *
cd MFFTP_TEST/machine_os
locsite recfm=fb lrecl=10
get MFFTP01.txt MFI01.FTPDATA.FBFILE (rep
MFFTP_VARS
quit
/*
//*
//* Download a text file to a new GDG bias
//*
//STEP3 EXEC PGM=MFFTP,PARM='slesz11-3.microfocus.com'                                                   
//SYSOUT DD  SYSOUT=*
//OUTPUT DD  SYSOUT=*  
//SFTPAUTH DD DSN=FTP.AUTH.DATA,DISP=(SHR)
//SFTPPPK  DD DSN=FTP.PRIV.DATA,DISP=(SHR)
//INPUT DD *
cd MFFTP_TEST/machine_os
locsite recfm=fb lrecl=10
locstat
get MFFTP01.txt MFI01.MFFTP.GDG(+1)
del MFFTP01.txt
cd ..
rmdir machine_os
/*