【问题标题】:Secure FTP using Windows batch script使用 Windows 批处理脚本保护 FTP
【发布时间】:2013-04-15 12:49:43
【问题描述】:

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

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

谢谢。

【问题讨论】:

    标签: windows batch-file ftp sftp


    【解决方案1】:

    首先,请确保您了解,如果您需要使用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,将 open command 中的 sftp:// 替换为 ftpes:// (explicit TLS/SSL) 或 ftps:// (implicit 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"
    

    如果您的服务器证书是not issued by a trusted authority,您可能需要添加-certificate 开关。

    同样,与 SFTP 一样,更简单的是在 WinSCP GUI 中设置和测试连接设置,然后使用 generate the script or batch file for you。


    查看完整的conversion guide from ftp.exe to WinSCP。

    您还应该阅读Guide to automating file transfers to FTP server or SFTP server。


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

    因此,WinSCP 支持(locale-neutral) timestamp formatting natively。例如,%TIMESTAMP#yyyymmdd% 在任何语言环境中解析为 20170515。

    (我是 WinSCP 的作者)

    【讨论】:

      【解决方案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 ; 
      

      【讨论】:

      • 嗨,尝试为您的代码提供一些上下文,例如它在做什么以及您建议 OP 使用什么软件。
      【解决方案3】:

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

      【讨论】:

      • WinSCP 也可以作为替代品吗?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-16
      • 1970-01-01
      • 2013-01-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多