2013-04-22 74 views
14

我目前在不同服務器上有批處理腳本,它們將csv文件傳輸到位於不同位置的FTP服務器。我的腳本與此類似:使用Windows批處理腳本的安全FTP

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 

如果我想要求安全傳輸,我的腳本將如何更新?

謝謝。

+0

首先,你必須確保該服務器支持任何形式的安全文件傳輸協議,例如SFTP – golimar 2013-04-22 15:07:48

回答

26

首先,確保您瞭解,如果您需要使用Secure FTP(= FTPS,根據您的文本)或SFTP(根據您使用的標籤)。

Windows命令行ftp.exe都不支持。正如你所建議的,你可以使用WinSCP。它支持FTPS和SFTP。

使用WinSCP賦予,您的批處理文件看起來像(用於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 

而且批處理文件:

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

雖然使用WinSCP賦予(所有能力特別providing commands directly on command-line和該批處理文件簡化爲:

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" 

有關-hostkey切換的用途,請參閱verifying the host key in script

對於手動腳本/批處理文件更容易的設置和測試中的WinSCP GUI的連接設置,然後把它generate the script or batch file for you

Generate batch file

所有你需要調整的是源文件名(使用前面所示的%TIMESTAMP%語法)以及日誌文件的路徑。


對於FTPS,與ftpes://explicit TLS/SSL)或ftps://implicit TLS/SSL)取代sftp://open command。取下-hostkey開關。

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

您可能需要添加-certificate開關,如果你的服務器的證書是not issued by a trusted authority

與SFTP一樣,更容易的是在WinSCP GUI中設置和測試連接設置,然後將其設置爲generate the script or batch file for you


查看完整的conversion guide from ftp.exe to WinSCP。您也應該閱讀Guide to automating file transfers to FTP server or SFTP server


注使用%TIMESTAMP#yyyymmdd%代替%date%:的%date%變量值A格式是區域特異性的。因此,請確保您在實際將要使用腳本的相同語言環境上測試腳本。例如,在我的捷克語語言環境中,%date%解析爲čt 06. 11. 2014,作爲文件名的一部分使用時可能會出現問題。因此,WinSCP支持(locale-neutral) timestamp formatting natively。例如,%TIMESTAMP#yyyymmdd%在任何區域設置上解析爲20170515

(我的WinSCP的作者)

2

內置的FTP命令沒有安全設施。改爲使用cUrl。它的腳本,更強大,並具有FTP安全。

+0

會的WinSCP是一個足夠的替代品,以及? – etm124 2013-04-22 15:52:54

-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

嗨,試着爲你的代碼提供一些上下文,比如它在做什麼以及你使用什麼軟件。 – 2016-01-16 09:49:16