使用Windows批处理脚本保护FTP

时间:2013-04-22 14:53:22

标签: windows batch-file ftp sftp

我目前在不同的服务器上有批处理脚本,它们将csv文件传输到不同位置的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

如果我想要安全传输,我的脚本将如何更新?

感谢。

3 个答案:

答案 0 :(得分:33)

首先,请确保您了解,如果您需要使用Secure FTP(= FTPS,根据您的文字)或SFTP(根据您使用的标签)。

Windows命令行ftp.exe均不支持。如您所建议,您可以使用WinSCP。它支持FTPS和SFTP。

使用WinSCP,您的批处理文件看起来像(对于SFTP):

echo open sftp://ftp_user:password@ftp.MyFTPSite.com -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%TIMESTAMP% syntax),但批处理文件简化为:

winscp.com /log=ftpcmd.log /command ^
    "open sftp://ftp_user:password@ftp.MyFTPSite.com -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,请将sftp://中的ftpes://替换为ftps://open command)或-hostkeyexplicit TLS/SSL)。删除winscp.com /log=ftpcmd.log /command ^ "open ftps://ftp_user:password@ftp.MyFTPSite.com -explicit" ^ "put c:\directory\%1-export-%%TIMESTAMP#yyyymmdd%%.csv" ^ "exit" 开关。

-certificate

如果您的服务器证书为implicit TLS/SSL,则可能需要添加%TIMESTAMP#yyyymmdd%开关。

同样,与SFTP一样,更容易在WinSCP GUI中设置和测试连接设置,然后将其设置为not issued by a trusted authority


查看完整的generate the script or batch file for you

您还应该阅读conversion guide from ftp.exe to WinSCP


请注意使用%date%代替%date%%date%变量值的格式是特定于语言环境的。因此,请确保在实际要使用该脚本的同一语言环境中测试脚本。例如,在我的捷克语语言环境中čt 06. 11. 2014解析为%TIMESTAMP#yyyymmdd%,当用作文件名的一部分时可能会出现问题。

因此,WinSCP支持Guide to automating file transfers to FTP server or SFTP server。例如,20170515会在任何区域设置上解析为{{1}}。

(我是WinSCP的作者)

答案 1 :(得分:2)

内置FTP命令没有安全功能。请改用cUrl。它是可编写脚本的,功能强大且具有FTP安全性。

答案 2 :(得分:-2)

    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 ;