it-swarm.com.de

Sicheres FTP mit Windows-Batchskript

Ich habe derzeit Batch-Skripte auf verschiedenen Servern, die eine CSV-Datei auf einen FTP-Server an einem anderen Ort übertragen. Mein Skript sieht ungefähr so ​​aus:

echo user ftp_user> ftpcmd.dat
echo password>> ftpcmd.dat
echo put c:\directory\%1-export-%date%.csv>> ftpcmd.dat
echo quit>> ftpcmd.dat
ftp -n -s:ftpcmd.dat ftp.MyFTPSite.com
del ftpcmd.dat

Wie würde mein Skript aktualisiert, wenn ich eine sichere Übertragung benötigen würde?

Vielen Dank.

18
etm124

Stellen Sie zunächst sicher, dass Sie verstehen, ob Sie Secure FTP (= FTPS, gemäß Ihrem Text) oder [~ # ~] sftp [verwenden müssen. ~ # ~] (gemäß dem von Ihnen verwendeten Tag).

Weder wird von Windows-Befehlszeile unterstützt ftp.exe. Wie Sie vorgeschlagen haben, können Sie WinSCP verwenden. Es unterstützt sowohl FTPS als auch SFTP.

Mit WinSCP würde Ihre Batch-Datei wie folgt aussehen (für SFTP):

echo open sftp://ftp_user:[email protected] -hostkey="server's hostkey" >> ftpcmd.dat
echo put c:\directory\%1-export-%date%.csv >> ftpcmd.dat
echo exit >> ftpcmd.dat
winscp.com /script=ftpcmd.dat
del ftpcmd.dat

Und die Batch-Datei:

winscp.com /log=ftpcmd.log /script=ftpcmd.dat /parameter %1 %date%

Obwohl alle Funktionen von WinSCP genutzt werden (insbesondere das Bereitstellen von Befehlen direkt über die Befehlszeile und das Bereitstellen von Befehlen %TIMESTAMP% Syntax ) vereinfacht die Batch-Datei:

winscp.com /log=ftpcmd.log /command ^
    "open sftp://ftp_user:[email protected] -hostkey=""server's hostkey""" ^
    "put c:\directory\%1-export-%%TIMESTAMP#yyyymmdd%%.csv" ^
    "exit"

Zum Zwecke der -hostkey switch, siehe Überprüfen des Host-Schlüssels im Skript .

Einfacher als das manuelle Zusammenstellen der Skript-/Batch-Datei ist es, die Verbindungseinstellungen in der WinSCP-Benutzeroberfläche einzurichten und zu testen und dann das Skript oder die Batch-Datei für Sie zu generieren :

Generate batch file

Alles was Sie zum Tweaken brauchen, ist der Name der Quelldatei (benutzen Sie das %TIMESTAMP% (Syntax wie oben gezeigt) und der Pfad zur Protokolldatei.


Ersetzen Sie für FTPS das sftp:// im Befehl open mit ftpes:// ( explizites TLS/SSL ) oder ftps:// ( implizites TLS/SSL ). Entferne das -hostkey Schalter.

winscp.com /log=ftpcmd.log /command ^
    "open ftps://ftp_user:[email protected] -explicit" ^
    "put c:\directory\%1-export-%%TIMESTAMP#yyyymmdd%%.csv" ^
    "exit"

Möglicherweise müssen Sie das -certificate switch, wenn das Zertifikat Ihres Servers nicht von einer vertrauenswürdigen Stelle ausgestellt wurde .

Wie beim SFTP ist es auch hier einfacher, die Verbindungseinstellungen in der WinSCP-Benutzeroberfläche einzurichten und zu testen und dann das Skript oder die Batchdatei für Sie zu generieren .


Siehe eine vollständige Konvertierungsanleitung von ftp.exe an WinSCP .

Lesen Sie auch das Handbuch zur Automatisierung der Dateiübertragung zum FTP-Server oder SFTP-Server .


Hinweis zur Verwendung von %TIMESTAMP#yyyymmdd% Anstatt von %date%: Ein Format von %date% Variablenwert ist länderspezifisch. Stellen Sie also sicher, dass Sie das Skript in demselben Gebietsschema testen, in dem Sie das Skript tatsächlich verwenden werden. Zum Beispiel auf meinem tschechischen Gebietsschema das %date% wird zu čt 06. 11. 2014, was möglicherweise problematisch ist, wenn es als Teil eines Dateinamens verwendet wird.

Aus diesem Grund unterstützt WinSCP (locale-neutral) die native Formatierung von Zeitstempeln . Zum Beispiel %TIMESTAMP#yyyymmdd% wird zu 20170515 in einem beliebigen Gebietsschema.

(Ich bin der Autor von WinSCP)

33
Martin Prikryl

Der eingebaute FTP-Befehl bietet keine Sicherheitsfunktion. Verwenden Sie stattdessen cUrl . Es ist skriptfähig, wesentlich robuster und hat FTP-Sicherheit.

2
Matt Williamson