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