Hier mal ein Beispiel.
Installation sshpass:
- yum-Paketmanager installieren: https://ibmi-oss-docs.readthedocs.io...um/README.html
- CALL QP2TERM
-
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.
Bookmarks