grosser-bruder
Goto Top

SFTP Script (psftp.exe) Windows2003 Std.Server 64-Bit SFTP läuft manuell, jedoch nicht als Scheduled Task

Windows 2003 Std. Server 64-Bit Englisch
Intel Xeon X5450 3.00 GHz
4 GB RAM

Hallo zusammen,

gerne möchte ich automatisiert, Daten von einem SFTP Server abholen. Hierzu habe ich ein Script geschrieben, welches wie folgt aussieht. Das Script besteht aus 3 Teilen, in dem ersten Teil, wird das Logfile definiert, sowie das cmd file aufgerufen, welches sich auf den SFT Server verbindet. In diesem File, wird mittels dem Programm psftp.exe und diversen Paramatern (Siehe unten) die Verbindung zum SFTP Aufgebaut, sowie die Datei abgeholt. Im Anschluß, wird die Datei an einen entsprechenden Ort kopiert, sowie aus Sicherheitsgründen eine Dateihistorie erstellt. Im Abspann werden noch diverse Abfragen durchgeführt, welche ins Logbuch geschrieben werden.

Nun folgendes Problem. Das Script funktioniert wunderbar, allerdings nur, so lange ich es manuell aufrufe. Erstelle ich einen Scheduled Task, mit den entsprechenden Benutzerinformationen läuft es nicht mehr. Als Fehlercode, wird der Standardcode 0x1 (also nicht erfolgreich) ausgegeben.

Besteht ein Problem, wenn ein Batchfile, ein anderes File aufruft??

Für Euere Hilfe wäre ich sehr Dankbar..


Anbei der Sourcecode der entsprechenden Files:

File 1: (personal.cmd)

SET LOGFILE=h:\scripts\Personalstamm\personal.log

echo "Masterdate transfer starting" >> %LOGFILE%
echo "Date:" >> %LOGFILE%
date /T >> %LOGFILE%
echo "Time:" >> %LOGFILE%
time /T >> %LOGFILE%

call ConnecttoSFTPServer.cmd


File 2 (ConnecttoSFTPServer.cmd)


SET LOGFILE=h:\scripts\Personalstamm\personal1.log


psftp.exe %servername%@%ipadress%-pw %password% -b SFTPCommands.DAT >> %LOGFILE% --> Hier werden die SFTP Commands aufgerufen

if not exist %filetodownload% goto fehler
copy h:\scripts\Personalstamm\%filetodownload% "H:\%mesname%\lohn_exp\" >> %LOGFILE%

del h:\scripts\Personalstamm\%filetodownload%.8
ren h:\scripts\Personalstamm\%filetodownload%.7 %filetodownload%.8
ren h:\scripts\Personalstamm\%filetodownload%.6 %filetodownload%.7
ren h:\scripts\Personalstamm\%filetodownload%.5 %filetodownload%.6
ren h:\scripts\Personalstamm\%filetodownload%.4 %filetodownload%.5
ren h:\scripts\Personalstamm\%filetodownload%.3 %filetodownload%.4
ren h:\scripts\Personalstamm\%filetodownload%.2 %filetodownload%.3
ren h:\scripts\Personalstamm\%filetodownload%.1 %filetodownload%.2
ren h:\scripts\Personalstamm\%filetodownload% %filetodownload%.1


echo "Job finished successfully" >> %LOGFILE%
goto ende

:fehler
echo "Job failed" >> %LOGFILE%


:ende
echo "Date:" >> %LOGFILE%
date /T >> %LOGFILE%
echo "Time:" >> %LOGFILE%
time /T >> %LOGFILE%

echo "---------------------------" >> %LOGFILE%


File 3 (SFTPCommands.DAT)

cd out
get pers_aps.dat
bye

Content-Key: 154786

Url: https://administrator.de/contentid/154786

Printed on: April 16, 2024 at 11:04 o'clock

Member: micneu
micneu Nov 10, 2010 at 14:21:31 (UTC)
Goto Top
wie machst du es mit dem passwort?
ist das ziel ein linux server?
hast du deinen schlüssel auf dem server hinterlegt in der datei "authorized_keys"?

gruß michael
Mitglied: 60730
60730 Nov 10, 2010 at 15:30:26 (UTC)
Goto Top
Moin,

da hast du aber einige Daten verschleiert/parametrisiert die die Ursache sein könnten.
Wobei ich dir mal glauben will, dass es manuell wirklich läuft - das fehlende Leerzeichen nach % und -pw sieht kosmisch aus

psftp.exe %servername%@%ipadress%-pw %password% -b SFTPCommands.DAT >> %LOGFILE%

  • kennt der Scriptuser Laufwerk Heinrich
if exist h:\scripts\Personalstamm\personal.log echo Heinrich kenn ich
pause
  • was steht im Logfile?

Die plausibelste Lösung wäre du werkelst im Task nicht in dem Ordner, wo die gecallten Scripte liegen.

Gruß
Member: Grosser-Bruder
Grosser-Bruder Nov 10, 2010 at 15:46:16 (UTC)
Goto Top
Hallo Michael,

was für ein System das Zielsystem ist, kann ich nicht sagen, da es sich um ein externes System handelt und wir lediglich die Datei abholen.
Das Passwort steht in dem Script blanko drin, kann ich aber hier schlecht posten face-wink

Folgende Infos habe ich herauskommentiert:


%servername%
%ipadress%
%password%
%mesname%
%filetodownload%
Member: Grosser-Bruder
Grosser-Bruder Nov 10, 2010 at 15:50:53 (UTC)
Goto Top
Moin Timo,

manuell funktioniert das 100%, führe es ja täglich aus, damit ich die Datei bekomme. Der Scriptuser kennt das Laufwerk H:\. Alle Files (bis auf das File, welches wegkopiert wird) liegen in dem gleichen Verzeichniss...

Wenn es manuell lief, sieht das Logfile so aus:

"Masterdate transfer starting"
"Date:"
10.11.2010
"Time:"
16:49
Remote working directory is /
Remote directory is now /out
remote:/out/%filetodownload%=> local:%filetodownload% 1 file(s) copied.
"Job finished successfully"
"Date:"
10.11.2010
"Time:"
16:49
"---------------------------"

Beste Grüße
Michael
Mitglied: 60730
60730 Nov 10, 2010 at 15:58:40 (UTC)
Goto Top
moin,

nicht falsch verstehen, aber wie das manuell aussieht ist mir und dir ja "latte"...
Wie das aussieht, wenn der Task es laufen läßt, das ist der interessante Punkt.

Gruß
Member: micneu
micneu Nov 10, 2010 at 21:04:10 (UTC)
Goto Top
ist sftp nicht ftp über ssh oder so ähnlich?

deshalb würde ich einfach das passwort über schlüssel austauschen lasse.
so das es für den benutzer nicht mehr angegeben werden muss.

schau dir das
http://blog.murawski.ch/2010/04/ssh-authentifizierung-mit-privatekey/
und das
http://www.puddingonline.com/~dave/publications/SSH-with-Keys-HOWTO/doc ...
an....

prüfe mal ob es ein linux ist....
so ist euer script auch sicherer, das passwort ist nicht im klartext.

kannst ja auch mal schauen ob ihr, (bestimmt) wenn es ein linux server ist nicht mit scp löst.

gruß michael
Mitglied: 60730
60730 Nov 10, 2010 at 21:58:57 (UTC)
Goto Top
Moin,
Zitat von @micneu:
ist sftp nicht ftp über ssh oder so ähnlich?

So ähnlich - SFTP ist etwas "besser" als Domain, da gibts nur zwei Varianten in der Computerwelt, was man damit meint face-wink

Ich glaub auch nicht daran, dass es SSHFTP ist, denn sonst hätte er ja mal einen Schlüssel importieren müssen (an sowas erinnert man sich doch)
Eher wird es wohl das simpleFTP sein, sollte bei der Übertragung nur einen Port (meistens 115) benutzen.

Aber auch das ist latte, wenn er "nur" im Event vom Task sieht, das ein Fehler produziert wurde, und nicht im Logfile.
Was ich so aus seinem Text rauslese.
Kann auch sein, das ich mich irre....

Moin,
Zitat von @micneu:
ist sftp nicht ftp über ssh oder so ähnlich?

So ähnlich - SFTP ist etwas "besser" als Domain, da gibts nur zwei Varianten in der Computerwelt, was man damit meint face-wink

Ich glaub auch nicht daran, dass es SSHFTP ist, denn sonst hätte er ja mal einen Schlüssel importieren müssen (an sowas erinnert man sich doch)
Eher wird es wohl das simpleFTP sein, sollte bei der Übertragung nur einen Port (meistens 115) benutzen.

Aber auch das ist latte, wenn er "nur" im Event vom Task sieht, das ein Fehler produziert wurde, und nicht im Logfile.
Was ich so aus seinem Text rauslese.
Kann auch sein, das ich mich irre....

Aber ganz genau kriegt man das nur so heraus:

fetchperso.cmd:
echo fetchperso.cmd
SET LOGFILE=h:\scripts\Personalstamm\personal

echo "Masterdate transfer starting">>%LOGFILE%.log  
echo Date: %date%>>%LOGFILE%.log
echo time: %time:~-11,8%>>%LOGFILE%.log
if exist h:\scripts\Personalstamm\. echo Drive h ready>>%LOGFILE%.log

echo ConnecttoSFTPServer>>%LOGFILE%.log
SET LOGFILE=h:\scripts\Personalstamm\personal1.log
Set filetodownload=?

call psftp.exe %servername%@%ipadress%-pw %password% -b SFTPCommands.DAT>>%LOGFILE%

if not exist %filetodownload% goto error
copy h:\scripts\Personalstamm\%filetodownload% "H:\%mesname%\lohn_exp\">>%LOGFILE%  

del h:\scripts\Personalstamm\%filetodownload%.8>>%LOGFILE%
ren h:\scripts\Personalstamm\%filetodownload%.7 %filetodownload%.8>>%LOGFILE%
ren h:\scripts\Personalstamm\%filetodownload%.6 %filetodownload%.7>>%LOGFILE%
ren h:\scripts\Personalstamm\%filetodownload%.5 %filetodownload%.6>>%LOGFILE%
ren h:\scripts\Personalstamm\%filetodownload%.4 %filetodownload%.5>>%LOGFILE%
ren h:\scripts\Personalstamm\%filetodownload%.3 %filetodownload%.4>>%LOGFILE%
ren h:\scripts\Personalstamm\%filetodownload%.2 %filetodownload%.3>>%LOGFILE%
ren h:\scripts\Personalstamm\%filetodownload%.1 %filetodownload%.2>>%LOGFILE%
ren h:\scripts\Personalstamm\%filetodownload% %filetodownload%.1>>%LOGFILE%


dir h:\scripts\Personalstamm\%filetodownload%.1 |find "%date% %% echo "Job finished successfully">>%LOGFILE%  
goto ende

:fehler
echo "Job failed">>%LOGFILE%  


:ende
echo Date: %date%>>%LOGFILE%
echo time: %time:~-11,8%>>%LOGFILE%
echo "---------------------------">>%LOGFILE%  

File 3 (SFTPCommands.DAT)
bin
cd out
get pers_aps.dat
bye

Du siehst, das ist etwas besser, aber grandios auf keinen Fall, denn wenn H nicht gefunden wird, schreibt er natürlich nix ins Log auf h:\
Ist das ne Freigabe oder ein lokaler Datenträger in der Kiste?

Gruß

Gruß
Member: Grosser-Bruder
Grosser-Bruder Nov 11, 2010 at 09:56:35 (UTC)
Goto Top
Moin Moin,

so ist es face-wink.. Wenn das Script per Task gestartet wird, geschieht überhaupt nichts, keine Fehlermeldung (außer 0x1), kein Eintrag, keine Date, nadda..

MfG
Michael
Mitglied: 60730
60730 Nov 11, 2010 at 11:35:52 (UTC)
Goto Top
Salü,

mit welchem Account läuft denn das Script?

Nehm (d)einen Rechner, nimm die Zugangsdaten im task, mit denen du angemeldet bist und mache 3 pausen in das Script rein.
Dann siehst du auch, was er von dir will oder nicht will.

  • vor 13 (FTP) und danach eine Pause und als letzte Zeile.

btw: ist dir aufgefallen, dass ich aus deinen 2 Scripts eines gemacht habe und das Log so hybscher aussieht und vor allem ein Call vorm FTP Befehl steht?
Das ist deutlich sinniger, denn so (wie du es vorher hattest) rennt der lösch & Dateinamenumstricker evtl. schon, wenn die Datei gar nicht da ist, weil die noch gefetcht wird.


again: Auf die Frage, ob Heinrich ein lokales oder Netzwerklaufwerk ist, hast du immer noch nix geschrieben.face-sad
Normalerweise reagiere ich da nicht so gelassen...

Gruß
Member: Grosser-Bruder
Grosser-Bruder Nov 11, 2010 at 13:09:10 (UTC)
Goto Top
Hey MIchael,

ist grade in der Klärung. Schauen wir mal, ob wir heute noch eine Antwort erhalten..

MfG
Member: Grosser-Bruder
Grosser-Bruder Nov 11, 2010 at 13:15:38 (UTC)
Goto Top
Zitat von @60730:


Ich glaub auch nicht daran, dass es SSHFTP ist, denn sonst hätte er ja mal einen Schlüssel importieren müssen
(an sowas erinnert man sich doch)

--> Dies war definitiv nicht der Fall


Eher wird es wohl das simpleFTP sein, sollte bei der Übertragung nur einen Port (meistens 115) benutzen.

--> Es wird der Port 22 verwendet

Aber auch das ist latte, wenn er "nur" im Event vom Task sieht, das ein Fehler produziert wurde, und nicht im Logfile.
Was ich so aus seinem Text rauslese.
Kann auch sein, das ich mich irre....

--> Nein, du hast zu 100% recht.

Du siehst, das ist etwas besser, aber grandios auf keinen Fall, denn wenn H nicht gefunden wird, schreibt er natürlich nix
ins Log auf h:\
Ist das ne Freigabe oder ein lokaler Datenträger in der Kiste?

--> Das ist n lokaler Datenträger.

Werde mal dein Script testen, besten Dank bereits im Voraus
Member: Grosser-Bruder
Grosser-Bruder Nov 11, 2010 at 13:18:22 (UTC)
Goto Top
again: Auf die Frage, ob Heinrich ein lokales oder Netzwerklaufwerk ist, hast du immer noch nix
geschrieben.face-sad

Normalerweise reagiere ich da nicht so gelassen...

Siehe oben, ist lokal.. Hätte Euch natürlich gerne früher geschrieben, aber hatte ein anderes Thema, das ich priorisieren musste. Merci für deine Geduld face-smile
Mitglied: 60730
60730 Nov 11, 2010 at 13:19:17 (UTC)
Goto Top
Zitat von @Grosser-Bruder:
Hey MIchael,

ist grade in der Klärung. Schauen wir mal, ob wir heute noch eine Antwort erhalten..
*grmblfix*

da öffnet man das ftp Programm und schaut mit netstat -a welche Ports offen sind und die Suppe ist geklärt.
Und da du es irgendwie schaffst, meine Gegenfrage bezüglich des Heinrichs wiederholt zu ignorieren, mach ich das mit deinem Problem ab jetzt auch.
MfG
N8
Member: Grosser-Bruder
Grosser-Bruder Nov 11, 2010 at 13:35:58 (UTC)
Goto Top
da öffnet man das ftp Programm und schaut mit netstat -a welche Ports offen sind und die Suppe ist geklärt.
Und da du es irgendwie schaffst, meine Gegenfrage bezüglich des Heinrichs wiederholt zu ignorieren, mach ich das mit deinem
Problem ab jetzt auch.

Ich habe überhaupt nichts ignoriert, schau doch mal in meinen Posts nach. Erst lesen, dann maulen Kammerad
Member: Grosser-Bruder
Grosser-Bruder Nov 11, 2010 at 13:39:31 (UTC)
Goto Top
mit welchem Account läuft denn das Script?

Läuft mit dem lokalen Admin
Member: Grosser-Bruder
Grosser-Bruder Nov 11, 2010 at 14:35:04 (UTC)
Goto Top
Hallo zusammen,

leider hat Timos Script ebenfalls nicht funktioniert. identisches Problem, wie auch bei meinem Script. Das Logfile ist nun deutlich schöner, Danke hierfür, aber leider ist das Problem immer noch das gleiche. Ich denke, wir sind auch auf der falschen Fährte.. Jeder versucht, den Fehler an dem Script zu suchen, denke jedoch nicht, dass es daran liegt.

Kann es sein, dass Windows ein Problem hat, mit dem Scheduler Programme zu starten, welche weitere Programme starten? Ggf. for security reasons??

Merci & bis bald

Michael
Member: Grosser-Bruder
Grosser-Bruder Nov 12, 2010 at 10:01:52 (UTC)
Goto Top
Mahlzeit zusammen,

also es liegt, (wie ich die ganze Zeit schon vermutet und mehrfach erwähnt habe) nicht an dem Script. Habe mein Script, sowie Timos Script getestet. Beide laufen Lokal, aber nicht per Scheduled Task.

Per Scheduled Task, laufen die Scripte, wenn der Benutzer, welcher den Task ausführt, angemeldet ist. Natürlich, habe ich den Haken, "Run only if logged on" nicht gesetzt. Der Task kann mit einem lokalen, sowie mit einem Domänenbenutzer gestartet werden..

Nun stellt sich folgende Frage, WARUM muss der sch.... Benutzer angemeldet sein, um den Task zu starten..

Beste Grüße
Michael
Mitglied: 60730
60730 Nov 12, 2010 at 11:21:49 (UTC)
Goto Top
moin,

schau mal unter secpol.msc, ob er User in der gruppe "log on as batch job" überhaupt drin steht.
Wie ich die ganze Zeit schon vermutet habe (auch das "dämliche" Script wurde gestartet ins Logfile schreiben - passiert ja nicht) startet das Script halt schlicht und einfach nicht.

Und deine letzten Zeilen deuten darauf hin, dass der User nicht in der Gruppe steckt.

Jeder versucht, den Fehler an dem Script zu suchen
Stimmt nicht...

Gruß
Member: Grosser-Bruder
Grosser-Bruder Nov 12, 2010 at 12:22:10 (UTC)
Goto Top
Mahlzeit Timo,

habe eben geprüft.. "Leider" stehen alle, insbesondere der entsprechende Benutzer darin..
face-sad


MfG