View Full Version : SFTP auf der Iseries
Hast du das mit sshpass (wie von mir beschrieben) schon probiert?
Hallo Andreas. Wo gebe ich das ein? bei QSH oder bei call q2pterm? Ich bin da leider nicht so firm...
Allerdings nachdem ich diese Lösung dann auf einigen Maschinen verwenden möchte wären "Boardmittel" aus meiner Sicht besser... aber zum testen wäre ich nicht abgeneigt! DANKE!
Andreas_Prouza
11-05-21, 13:03
Ok, wenn du es auf verschiedenen Maschinen brauchst, kann das schon etwas zu Aufwendig sein.
Es muss das Open Source Packet installiert sein und ich habe immer wieder ferstgestellt, dass dies oft nicht der fall ist.
Ist aber alles kein großes Problem. Kann man auch offline machen, wenn das Internet vor der IBM i geschützt wird.
Wenn YUM drauf ist kannst du dies einfach via QSH machen.
Hier mal ein Beispiel.
Installation sshpass:
yum-Paketmanager installieren: https://ibmi-oss-docs.readthedocs.io/en/latest/yum/README.html
CALL QP2TERM
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.
#! /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:
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.
Für mich wäre da mal eher interssant, wie beim STRFTP eine SECCNN(...) eingerichtet wird.
Der Vorteil ist die einfachere Scriptfähigkeit durch OVRDBF STDIN/STDOUT.
Da ich das noch nicht gebraucht habe aber die Kunden verstärkt danach fragen, sollte man das doch ohne Zusatzsoftware können:
https://www.ibm.com/docs/en/i/7.3?topic=ssw_ibm_i_73/cl/ftp.htm
(https://www.ibm.com/docs/en/i/7.3?topic=ssw_ibm_i_73/cl/ftp.htm)Bei dem sftp der p2term hatte ich früher mal vergeblich versucht, eine Eingabeumleitung zu erreichen, da sftp nicht von STDIN liest.
Aber da die IBM i dies ja nun native können soll, wäre es auch schön das mal nutzen zu können.
Hallo zusammen,
bin normalerweise stiller Leser, hatte aber auch das Problem "SFTP mit Passwort " und habe es wie folgt mit IBM über die QMGTOOLS gelöst.
1. Zielserver bekannt geben (Fingerprint)
STRQSH
SSH -L SFTPUSER SFTP.SERVER.DE Die Abfrage mit yes beantworten
Achtung ggf. pro USER wegen known_hosts HOME-Verzeichnis
2. SFTP Transfer ausführen, ggf. LIB QMGTOOLS vorher aktualisieren, GO QMGTOOLS/MG Auswahl 13
ADDLIBLE LIB(QMGTOOLS) POSITION(*LAST)
QMGTOOLS/STRSFTP CONFIG(*NOCFG) +
FILETYPE(*IFS) +
RMTLOC(&SERVER) +
USR(&USER) +
PWD(&PWD) +
FUNCTION(*PUT) +
LCLFILE(&LCLFILE) +
RMTFILE(&RMTFILE) +
LOGDIR('/TMP') +
KEEPLOG(Y) +
LOGFILE(&LOGFILE)
RMVLIBLE LIB(QMGTOOLS)
Funktioniert einwandfrei, Log steht dann in der /tmp
Ich hoffe, ich konnte Euch damit etwas unterstützen.
Immer noch keine native Lösung des STRFTP.