Hier mal ein Beispiel.

Installation sshpass:

  1. yum-Paketmanager installieren: https://ibmi-oss-docs.readthedocs.io...um/README.html
  2. CALL QP2TERM
  3. Code:
    export PATH=/QOpenSys/pkgs/bin:$PATH
    yum install sshpass

Der ausführende User sollte ein Home-Verzeichnis besitzen (z.B. /home/abc), da hier nach Ausführung des sftp-Befehls der Ordner .ssh mit Datei known_hosts abgelegt wird.

Shell Script (Datei im IFS) mit dem sshpass und sftp-Befehl. Die Datei muss mit einer ASCII CCSID z.B. 819 erstellt werden sowie LF als Umbruch haben.
Code:
#! /usr/bin/sh
export PATH=/QOpenSys/pkgs/bin:$PATH
export SSHPASS='ganzGeheimesPasswort'
sshpass -e sftp -o "StrictHostKeyChecking no" -oBatchMode=no -b - remoteUser@sftp_server << !
        cd /zielverzeichnis
        put dateien*
        quit
!
retval="$?"
if [ $retval -ne 0 ]
then
   echo "Transfer failed! Status:" $retval
   exit $retval
else
   echo "Transfer successful"
fi

  • Man kann sshpass auch mit Parameter -p "ganzGeheimesPasswort" aufrufen, allerdings kommt es dann zum Problem, wenn das Passwort spezielle Sonderzeichen enthält. Daher besser mit der Umgebungsvariable arbeiten.
  • Der Parameter StrictHostKeyChecking bestätigt automatisch die Fingerprint Meldung.


Das Script dann im CL-Programm wie folgt aufrufen:
Code:
PGM
DCL        VAR(&ERROR)     TYPE(*INT)  LEN(4)

ADDENVVAR  ENVVAR(QIBM_QSH_CMD_ESCAPE_MSG) VALUE('Y') 
MONMSG     MSGID(CPFA980) EXEC(+                      
           CHGENVVAR ENVVAR(QIBM_QSH_CMD_ESCAPE_MSG) +
                     VALUE('Y'))                      

CHGVAR     VAR(&ERROR) VALUE(0)                     
QSH        CMD('/QOpenSys/usr/bin/sh -c +           
             "sftp_script.sh" > sftp_log.log 2>&1')
MONMSG     MSGID(QSH0000) EXEC(+                    
           CHGVAR VAR(&ERROR) VALUE(1))
Durch die Umgebungsvariable QIBM_QSH_CMD_ESCAPE_MSG greift das MONMSG im Fehlerfall, sodass man auch mit bekommt, ob der SFTP-Befehl fehlgeschlagen ist.

Ich hoffe das hilft weiter.