PDA

View Full Version : sFTP funktioniert nur interaktiv?



Seiten : [1] 2

hteufl
03-09-21, 08:04
Liebes Forum!

Wir sollen Daten von der iSeries auf einen sFTP Server übertragen! Interaktiv funktioniert das Programm soweit. Im Batch zeigt das Programm aber seltsame Verhaltensweisen!

Im CL Programm werden zwei Scripts aufgerufen
1) Passwortscipt
2) Datenübertragungsscript

Passwortscript:
#!/bin/sh
printf rxxxxxxxxy

Datenübertragungsscript:
#!/bin/sh
export DISPLAY= SSH_ASKPASS=/home/Herman/openssh_password_script.sh
printf "mput /FFPublic/PDFAusgabe/LEKL/FTP/LE*\nquit\n" | sftp p413962f1@p413962.xxxxxxxx.de

Mein "Firewallkollege" hat mir mitgeteilt, dass der BATCH Aufruf auf einen FTP Server zugreift und nicht auf den interaktiven richtigen sFTP Server.
Wir haben den Servernamen p413962.xxxxxxxx.de auch durch die IP Adresse ersetzt ohne Erfolg.
Meine Frage an Euch würde nun lauten: Warum verhält sich ein und das selbe CL-Programm interaktiv unterschiedlich zum BATCH Aufruf?

Hier noch der Ausschnitt aus dem CL Programm:
QSH CMD('/home/Hermann/openssh_password_script.sh')
QSH CMD('exec /QOpenSys/usr/bin/ksh -c "/home/Hermann/batch_leistungserklaerungen_sftp_script.sh"')

Das Log beim korrekten interaktiven Aufruf:
rxxxxxxxxxxy
Die Eingabetaste drücken, um die Terminalsitzung zu beenden.
Connected to p413962.xxxxxxxxxxx.de.
sftp> mput /FFPublic/PDFAusgabe/LEKL/FTP/LE*
Uploading /FFPublic/PDFAusgabe/LEKL/FTP/LE001297.PDF to /LE001297.PDF
Uploading /FFPublic/PDFAusgabe/LEKL/FTP/LE_Muster.pdf to /LE_Muster.pdf
sftp> quit

Ich vermute, dass nicht mehr viel fehlt, um das Programm korrekt im BATCH korrekt aufrufen zu können!

Vielen Dank im Voraus
Hermann

Fuerchau
03-09-21, 13:02
Wie hast du
a) die Eingabeumleitung
b) was steht in der Eingabedatei

Meine Versuche mit sftp und Script scheiterten, da sftp gezielt die Konsole abfragen will und eine Eingabeumleitung nicht funktionierte.

Hast du mal den normalen STRFTP mit TLS probiert? Ich hatte noch keine Gelegenheit dazu.

hteufl
03-09-21, 13:23
Hallo Furchau!

Vielen Dank für deine Antwort! Wenn ich das richtig verstehe soll die Scriptzeile:

export DISPLAY= SSH_ASKPASS=/home/Herman/openssh_password_script.sh
die Umleitung machen.

Wenn du mit Eingabedatei die FTP Anweisungen meinst wären es diese Zeilen:
export DISPLAY= SSH_ASKPASS=/home/Herman/openssh_password_script.sh
printf "mput /FFPublic/PDFAusgabe/LEKL/FTP/LE*\nquit\n" | sftp p413962f1@p413962.xxxxxxxx.de

Es sollen nur bestimmte PDF aus dem IFS an das Verzeichnis des sFTP Servers gesandt werden, was soweit interaktiv funktioniert. Nur im BATCH leider nicht!

Danke
Hermann





(p413962f1@p413962.xxxxxxxx.de)

Fuerchau
03-09-21, 16:41
Also mit dem normalen FTP (als Beispiel) schreibe ich die manuellen Anweisungen in eine PF FTPINPUT.
Per
OVRDBF STDIN TOFILE(FTPINPUT)
OVRDBF STDOUT TOFILE(FTPOUTPUT)
STRFTP

Werden die Befehle
logon
user
password
mget *.txt
quit

Nacheinander befolgt und durchgeführt.

Bei sftp benötigst du also eine ifs-datei in der die manuellen Befehle stehen.
Der QSH-Aufruf ist dann

sftp parameter < InputScript.txt > Output.log

Wie gesagt, bei mir hat die Eingabeumleitung nicht funkioniert, da die Eingabe-Umleitung ignoriert wurde. Die Ausgabeumleitung aber wohl.

prsbrc
06-09-21, 06:26
Guten Morgen.

Ist der Benutzer im Batch = interaktive Benutzer?
Wenn nicht dann musst du dich mal mit dem Batch-Benutzer interaktiv anmelden und eine SSH-Verbindung aufbauen damit der Fingerprint gespeichert wird. Das war bei mir damals mal das Problem.

hteufl
08-09-21, 19:06
Danke für die Antwort!

Es ist ein und derselbe Benutzer - sogar mit SECADM Rechten! Wenn ich mich nicht täusche brauche ich keinen "Fingerprint" bei einem User mit Kennwort - oder?

prsbrc
09-09-21, 06:39
Guten Morgen.
Bei den paar sFTP-Zugriffen welche ich realisieren musste, musste sich der Batchbenutzer immer einen Fingerprint in den known_hosts eintragen. Auch mit Benutzer und Kennwort, das war dem sFTP egal. Also interaktiv anmelden und per SSH zum sFTP-Server um den fingerprint einmal abspeichern zu lassen

hteufl
18-09-21, 12:52
Ich habe mit dem Batch Benutzer eine SSH Verbindung zum sFTP Server aufgebaut wobei der Fingerprint in die HOST Tabelle eingetragen wurde. Der Batchjob läuft zwar ohne Fehler ab meldet "Befehl wurde normal mit Ausführungsstatus 255 beendet" was vermutlich nichts gutes bedeutet.
Im Log Files welches bei der Verbindung aufgebaut wird steht:
"lost connection xxxxxxxxxxxxxfork: Error 3489 occurred" - was auch immer das wieder heissen soll!
Ich bin mit meinen Latein am Ende und komme nicht weiter - vielleicht hat noch jemand eine Idee die sFTP Verbindung ins Laufen zu bekommen.

Vielen Dank im Voraus
Hermann

Fuerchau
18-09-21, 15:28
Fehlerbeschreibung siehe hier:
https://www.ibm.com/support/pages/qshell-message-qsh0002-error-code-3489-occurs-when-calling-qsh-cl-program-batch

Manche Subsysteme erlauben z.B. kein Multithreading, was allerdings ebenso benötigt werden könnte.

hteufl
23-09-21, 12:50
Liebes Forum!

Unsere sFTP Anwendung läuft jetzt problemlos im BATCH und INTERACTIV. Vieler eurer Tipps haben dazu beigetragen die Lösung für das Problem zu finden (Fingerprint generieren, Anzahl Jobs per Jobklasse zu erhöhen, etc.)
Aber ein Hauptgrund war ein % Zeichen im Kennwort welches der PRINTF Command falsch interpretiert hatte! Durch einen Beitrag im Internet konnte herausgefunden werden, dass ein einzelnes % durch ein weiteres %% ergänzt werden musste um das % Zeichen korrekt zu übertragen.
Beitrag: https://alvinalexander.com/programming/printf-format-cheat-sheet/

Ein Problem ist noch zu lösen und zwar, dass das Logfile mit WRKLNK ohne Problem zu lesen ist, im IFS aber verstümmelte Zeichen dargestellt werden (OpsNav-Daten: Datenstromdatei Typ 2, 1141 german with euro)

Noch einmal vielen Dank für eure Unterstützung
Hermann