使用Windows批处理脚本保护FTP

etm*_*124 18 windows ftp sftp batch-file

我目前在不同的服务器上有批处理脚本,它们将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
Run Code Online (Sandbox Code Playgroud)

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

谢谢.

Mar*_*ryl 33

首先,请确保您了解,如果您需要使用安全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
Run Code Online (Sandbox Code Playgroud)

和批处理文件:

winscp.com /log=ftpcmd.log /script=ftpcmd.dat /parameter %1 %date%
Run Code Online (Sandbox Code Playgroud)

虽然使用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"
Run Code Online (Sandbox Code Playgroud)

出于-hostkey切换的目的,请参阅在脚本中验证主机密钥.

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

生成批处理文件

您需要调整的只是源文件名(使用%TIMESTAMP%前面显示的语法)和日志文件的路径.


对于FTPS,更换sftp://open命令ftpes://(明确的TLS/SSL)或ftps://(隐式TLS/SSL).取下-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"
Run Code Online (Sandbox Code Playgroud)

-certificate如果服务器的证书不是由受信任的颁发机构颁发,则可能需要添加交换机.

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


请参阅WinSCP的完整转换指南ftp.exe.

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


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

因此,WinSCP 本身支持(区域设置中立)时间戳格式化.例如,%TIMESTAMP#yyyymmdd%解析为20170515任何语言环境.

(我是WinSCP的作者)