2013-04-22 6 views
14

Ich habe derzeit Batch-Skripts auf verschiedenen Servern, die eine CSV-Datei an einen FTP-Server an einem anderen Speicherort übertragen. Mein Skript sieht so aus:Sichere FTP mit Windows-Batch-Skript

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 

Wenn ich eine sichere Übertragung benötigen würde, wie würde mein Skript aktualisiert werden?

Danke.

+0

Zuerst Sie müssen sicherstellen, dass der Server jede Art von sicheren Dateiübertragungsprotokollen unterstützt, zum Beispiel SFTP – golimar

Antwort

26

Stellen Sie zuerst sicher, dass Sie verstehen, wenn Sie Secure FTP (= FTPS, gemäß Ihrem Text) oder SFTP verwenden müssen (wie pro Tag Sie verwendet haben).

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

Mit WinSCP, der Batch-Datei aussehen würde (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 Fähigkeiten von WinSCP (insbesondere providing commands directly on command-line und die %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" 

Für den Zweck von -hostkey Schalter, siehe verifying the host key in script.

Einfacher als Zusammenbau des Skript/Batch-Datei manuell zu installieren und testen, um die Verbindungseinstellungen in WinSCP GUI und haben es dann generate the script or batch file for you:

Generate batch file

Alles, was Sie zwicken müssen, ist die Quelldateinamen (Verwenden Sie die %TIMESTAMP% Syntax wie zuvor gezeigt) und den Pfad zur Protokolldatei.


Für FTPS-, ersetzen die sftp:// im open command mit ftpes:// (explicit TLS/SSL) oder ftps:// (implicit TLS/SSL). Entfernen Sie den Schalter -hostkey.

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

Sie müssen möglicherweise die -certificate Schalter hinzufügen, wenn Zertifikat des Servers not issued by a trusted authority ist.

Wie beim SFTP ist es einfacher, die Verbindungseinstellungen in WinSCP GUI einzurichten und zu testen und dann generate the script or batch file for you zu haben.


Siehe eine vollständige conversion guide from ftp.exe to WinSCP.

Sie sollten auch die Guide to automating file transfers to FTP server or SFTP server lesen.


Hinweis %TIMESTAMP#yyyymmdd% statt %date% zu verwenden: Ein Format von %date% Variablenwert ist locale-spezifisch. Stellen Sie daher sicher, dass Sie das Skript in demselben Gebietsschema testen, in dem Sie das Skript tatsächlich verwenden werden. Zum Beispiel in meinem tschechischen Gebietsschema die %date% löst zu čt 06. 11. 2014, was könnte problematisch sein, wenn als Teil eines Dateinamens verwendet.

Aus diesem Grund unterstützt WinSCP (locale-neutral) timestamp formatting natively. Zum Beispiel %TIMESTAMP#yyyymmdd% löst zu 20170515 an einem beliebigen Gebietsschema.

(ich bin der Autor von WinSCP)

2

Der integrierte FTP-Befehl verfügt nicht über eine Sicherheitsfunktion. Verwenden Sie stattdessen cUrl. Es ist skriptfähig, viel robuster und hat FTP-Sicherheit.

+0

Wäre WinSCP ein ausreichender Ersatz sein, auch? – etm124

-1
ftps -a -z -e:on -pfxfile:"S-PID.p12" -pfxpwfile:"S-PID.p12.pwd" -user:<S-PID number> -s:script <RemoteServerName> 2121 

S-PID.p12 => certificate file name ; 
S-PID.p12.pwd => certificate password file name ; 
RemoteServerName => abcd123 ; 
2121 => port number ; 
ftps => command is part of ftps client software ; 
+1

Hallo, Versuchen Sie, Ihrem Code einen Kontext zu geben, z. B. was er macht und welche Software Sie dem OP vorschlagen. –