使用Windows批处理脚本保护FTP

我目前有不同的服务器上的批处理脚本,将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 

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

谢谢。

首先,如果你需要使用安全FTP (按照你的文本)使用安全FTP ,或者使用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的所有功能(尤其是直接在命令行和%TIMESTAMP%语法中 提供命令 ),但批处理文件简化为:

 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开关的目的,请参阅在脚本中验证主机密钥 。

比手动组装脚本/批处理文件更容易的是在WinSCP GUI中设置和测试连接设置,然后让它为您生成脚本或批处理文件 :

生成批处理文件

所有你需要调整的是源文件名(使用如前所示的%TIMESTAMP%语法)和日志文件的路径。


对于FTPS,请使用ftpes:// ( 显式TLS / SSL )或ftps:// ( 隐式TLS / SSL )替换open命令中的sftp:// 删除-hostkey开关。

 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开关。

同样,与SFTP一样,更容易的是在WinSCP GUI中设置和测试连接设置,然后让它为您生成脚本或批处理文件 。


查看从ftp.exe到WinSCP的完整转换指南 。

您还应该阅读指南以自动将文件传输到FTP服务器或SFTP服务器 。


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

由于这个原因,WinSCP 本地支持(locale-neutral)时间戳格式 。 例如%TIMESTAMP#yyyymmdd%在任何语言环境下解析为20170515

(我是WinSCP的作者)

内置的FTP命令没有安全设施。 改用cUrl 。 它的脚本,更强大,并具有FTP安全。

  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 ;