FTP seguro utilizando script de lotes de Windows

Actualmente tengo scripts por lotes en diferentes servidores que transfieren un archivo csv a un servidor FTP en una ubicación diferente. Mi script se parece a esto:

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 

Si quisiera solicitar una transmisión segura, ¿cómo se actualizaría mi script?

Gracias.

Primero, asegúrese de comprender, si necesita usar FTP seguro (= FTPS, según su texto) o SFTP (según la etiqueta que haya utilizado).

Ninguno es compatible con la línea de comandos de Windows ftp.exe . Como ha sugerido, puede usar WinSCP . Es compatible con FTPS y SFTP.

Usando WinSCP, su archivo por lotes se vería como (para 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 

Y el archivo por lotes:

 winscp.com /log=ftpcmd.log /script=ftpcmd.dat /parameter %1 %date% 

Aunque usa todas las capacidades de WinSCP (en particular, proporciona comandos directamente en la línea de comandos y la syntax %TIMESTAMP% ), el archivo por lotes se simplifica para:

 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" 

Para el propósito de -hostkey switch, verifique la clave del host en el script .

Más fácil que ensamblar el script / archivo por lotes manualmente es configurar y probar las configuraciones de conexión en WinSCP GUI y luego hacer que genere el script o archivo por lotes para usted :

Generar archivo por lotes

Todo lo que necesita modificar es el nombre del archivo de origen (use la syntax %TIMESTAMP% como se muestra anteriormente) y la ruta al archivo de registro.


Para FTPS, reemplace sftp:// en el comando open con ftpes:// ( TLS / SSL explícito ) o ftps:// ( TLS / SSL implícito ). Retire el interruptor de la -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" 

Es posible que necesite agregar el -certificate , si el certificado de su servidor no es emitido por una autoridad de confianza .

Nuevamente, al igual que con el SFTP, es más fácil configurar y probar las configuraciones de conexión en WinSCP GUI y luego hacer que genere el script o archivo por lotes para usted .


Consulte una guía de conversión completa de ftp.exe a WinSCP .

También debe leer la Guía para automatizar las transferencias de archivos al servidor FTP o al servidor SFTP .


Nota para usar %TIMESTAMP#yyyymmdd% vez de %date% : un formato de %date% variable value es específico de la localidad. Por lo tanto, asegúrese de probar el script en la misma ubicación en la que va a utilizar el script. Por ejemplo, en mi configuración regional checa, %date% resuelve en čt 06. 11. 2014 , lo que podría ser problemático cuando se usa como parte de un nombre de archivo.

Por este motivo, WinSCP admite el formato de marca de tiempo (neutral) de forma nativa . Por ejemplo, %TIMESTAMP#yyyymmdd% resuelve en 20170515 en cualquier configuración regional.

(Soy el autor de WinSCP)

El comando FTP incorporado no tiene una función de seguridad. Use cUrl en su lugar. Es progtwigble, mucho más robusto y tiene seguridad de FTP.

  ftps -a -z -e:on -pfxfile:"S-PID.p12" -pfxpwfile:"S-PID.p12.pwd" -user: -s:script  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 ;