Dateien automatisch per FTP herunterladen
Das war mal wieder typisch. Da hat sich ein Freund auf der Wiki von JTL umgesehen und ein Skript für den Download einer Datei vom Webserver per FTP auf den lokalen Rechner gesehen. Nur das Skript scheint irgendwie nicht das zu machen, was der Anwender erwartet. Prompt kommt der Post in der JTL-User-Community mit dem freundlichen Hinweis, ich könne sicher das Problem lösen. Wie die Menschen nur darauf kommen?
Hier kommt die Lösung.
Für den automatischen Download per FTP gibt es mehrere Lösungsansätze. Zum einen könnten wir uns ein SKript mit WinSCP schreiben, was kein schlechter Gedanke ist. Der zweite Ansatz ist basierend auf der JTL-Wawi Wiki, (zu der wir dir auch gerne im Rahmen unserer Tätigkeiten als JTL Agentur weiterhelfen können) eine Batchdatei die ein FTP-Skript ausführt. Solange wir den Download nur auf einem Windows Client machen, reicht die Batchdatei völlig aus. Etwas anders sieht es aus, wenn wir den Download direkt auf einem Windows 2012 R2 oder Windows 2016 Server ausführen möchten. Hier kommt es trotz offener Firewall zu einem Fehler. Darum setzen wir dort das Tool WinSCP ein, das wir dann über die Aufgabenplanung starten.
Als erstes brauchen wir ein Verzeichnis auf unserem Server oder Windows PC, welches wir die notwendigen Batchdateien legen und welches als Ziel für unseren Download dienen soll. Dafür Legen wir uns irgendwo, am besten im Root einer Partition, einen Ordner an, z.B. C:Download. In diesem Ordner legen wir mit dem Editor zwei Dateien an. Eine mit dem sinnigen Namen download.bat und die andere nennen wir ftpdownload.ftp. In jedem Fall sollten wir im Vorfeld darauf achten, dass die Dateinamenserweiterungen angezeigt werden! Das ganze sieht dann in etwa so aus wie in den folgenden drei Screenshots.
Wenn wir die Dateien angelegt haben, können wir uns ans „Skripten“ machen. Zuerst legen wir die das Skript für den FTP-Download an und öffnen dazu im Editor die Datei ftpdownload.ftp.
Um unser Download-Skript anlegen zu können, brauchen wir jetzt folgende Informationen:
- Die Domain, auf der die Daten liegen, z.B. meinedomain.de
- Den FTP-Benutzernamen, z.B. webmaster
- Das geheime Passwort des FTP-Benutzers, z.B. P@ssw0rd
- Den Pfad zur Datei auf dem Webspace, z.B. httpdocs/download
- Den Dateinamen der Datei die wir herunterladen wollen, z.B. test.txt
Aus diesen Informationen bauen wir uns jetzt folgendes Skript zusammen:
open meinedomain.de
webmaster
P@ssw0rd
bin
lcd C:download
cd /httpdocs/download
get test.txt
bye
In den Script müsst ihr jetzt nur noch meine Beispieldaten durch eure ersetzen.
Jetzt bearbeiten wir die download.bat, mit der wir die ftpdownload.ftp aufrufen und den eigentlichen Download anstoßen. Hier tragen wir folgenden schönen 4-Zeiler ein:
@echo off
echo --- starte FTP-Transfer….
ftp -s:ftpdownload.ftp
echo ---fertig.
Zum Testen empfiehlt es sich am Ende noch den Befehl Pause anzufügen, wie ihr aus dem Screenshot entnehmen könnt. Wollt ihr die Datei dann später über die Windows Aufgabenplanung automatisiert ausführen lassen, so solltet ihr danach diese Zeile wieder entfernen.
Delta Whiskey, das war es auch schon. Jetzt können wir mit einem mutigen Doppelklick unsere download.bat das erste Mal starten.
Teste ich das Skript auf einem Windows Server bekomme ich nach ein zwei Minuten die Fehlermeldung „425 Unable to build data connection: Connection timed out“. What to hell is this. Auch die Öffnung der Ports an der Firewall haben meinen Testserver nicht dazu verleiten lassen, die Test-Datei von meinem Webserver per FTP herunterzuholen. Shit happens!
Bleiben nur noch zwei Alternativen. Eine PowerShell-Skript oder der Einsatz von WinSCP. Ich habe mich für letzteres entschieden, da auch Dummys mit diesem Tool klarkommen sollten. WinSCP könnt ihr hier herunterladen: https://winscp.net/eng/download.php#download2
Die Installation von WinSCP ist selbsterklärend und ich glaube diese muss ich hier nicht weiter erläutern nach dem Start müsst wir uns mit unserem FTP-Server verbinden.
Anschließend klicken wir auf den Menü-Eintrag Sitzung und dort auf Erzeuge Sitzungs-URL/Code….
Im Reiter URL aktivieren wir die Optionen Benutzername, Passwort und wechseln anschließend in den Reiter Script.
Hier klicken wir auf den Button „In die Zwischenablage kopieren“ und öffnen anschließend den Windows Editor.
Den Text aus der Zwischenablage für wir in die neue Textdatei ein und löschen die Zeilen „# Ihr Befehl 1“ und „# Ihr Befehl 2“ heraus. Dafür die Zeile get /[Pfad zur Datei]/[Dateiname] [lokales Zielverzeichnis][lokaler Dateiname] ein. Das Ganze sollte dann so aussehen get /httpdocs/test.txt C:Downloadtest.txt
Die Datei speichern wir als ftpdownload.txt im Verzeichnis Download ab und rufen Sie über die Eingabeaufforderung auf. Dazu wechseln wir dort in das Installationsverzeichnis von WinSCP C:Program Files (x86)WinSCP und geben diesen Befehl ein winscp /script=“C:Downloadftpdownload.txt“
Das ganze kann man jetzt in eine einfache Aufgabe in Computerverwaltung Aufgabenplanung einbauen und dann wird die Datei einmal täglich vom Server heruntergeladen. Hier muss ich nur darauf achten, das ich unter Programm/Skript die WinSCP.exe auswähle und bei Argumente hinzufügen /script=“C:Downloadftpdownload.txt“ hinterlege. Fertig ist der automatische FTP-Download.
- 4.7/5
- 22 ratings
Very bad! | Bad | Hmmm | Oke | Good! |
---|---|---|---|---|
4.5% | 0% | 4.5% | 4.5% | 86.4% |
Haben Sie Fragen oder brauchen ein individuelles Angebot? Zögern Sie nicht, uns zu kontaktieren.
Interessanter Artikel, der mir helfen wird.
Kann man auch ein ganzes Verzeichnis downloaden?
starte FTP-Transfer
https://10.10.103.21: Unbekannter Host.
ftp> mein Username
Ungültiger Befehl
ftp> mein Passwort
Ungültiger Befehl
das kommt im cmd.exe Fenster, natürlich mit meinen richtigen Anmelde Daten wenn ich die .bat datei starte.
was habe ich vlt. falsch gemacht?
https:// entfernt jetzt geht es.
Der Artikel ist sehr interessant und hat mich schon etwas weiter gebracht, danke dafür.
Wie sieht es damit aus, dass der gesamte Inhalt eines FTP-Ordners per Batch-Script abgeholt wird?
Also nicht nur
get test.txt
sondern eventuell
get *.*
Gibt es hierzu einen passenden Befehl?
Danke im Voraus.
Du kannst über get /*.* alle inhalte von FTp abholen. / ist für Root bedacht
Versuche mal für alle Dateien „mget“ statt „get“
mget *.txt
Guten Tag
Funktioniert das auch mit einem SFTP Server?
Danke!
Ja
Hallo, ich würde auch gerne alle dateien in einem FTP Verezichnis herunterladen wollen und habe es mit dem get und auch mit dem mget befehler versucht, jedoch läd er nur ein einziges Bilder herunter und dieses ist dann auch noch fehlerhaft.
Habt Ihr vielleicht noch einen Tipp ?
Mit get * kannst du alle herunterladen
Guten Tag, wie kann ich mich direkt in ein Verzeichnis Einloggen, wenn ich für home directory keine Rechte besitze sondern nur für einen Ordner.
Wenn ich z.b open IP/Ordner im cmd eingeben
kommt unbekannter Host obwohl ich weiß das dieser Ordner auf dem FTP existiert
Liebes Ebakery Team
Danke euch vielmals für diese Anleitung. Ich habe unzählige Stunden verloren mein Batch Datei so umzuschreiben, dass diese durch die Firewall gelassen wird, aber einfach ohne Erfolg.
Durch eure Anleitung habe ich das Problem in einer Stunde gelöst und dafür bin ich euch einfach nur DANKBAR!
Ihr seid Super!