我目前在不同的服务器上有批处理脚本,它们将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
如果我想要安全传输,我的脚本将如何更新?
感谢。
答案 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:
您需要调整的只是源文件名(使用前面显示的%TIMESTAMP%
语法)和日志文件的路径。
对于FTPS,请将sftp://
中的ftpes://
替换为ftps://
(open
command)或-hostkey
(explicit 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 ;