Sécuriser FTP en utilisant le script Windows batch

j'ai actuellement des scripts de traitement par lots sur différents serveurs qui transfèrent un fichier csv vers un serveur FTP à un endroit différent. Mon script ressemble à ceci:

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 je voulais une transmission sécurisée, Comment mon script serait-il mis à jour?

Merci.

17
demandé sur Martin Prikryl 2013-04-22 18:53:22

3 réponses

tout d'Abord, assurez-vous que vous comprenez, si vous avez besoin d'utiliser Secure FTP (=FTPS, comme par votre texte) ou SFTP (selon l'étiquette que vous avez utilisée).

ni L'un ni l'autre N'est supporté par la ligne de commande de Windows ftp.exe. Comme vous l'avez suggéré, vous pouvez utiliser WinSCP. Il supporte à la fois le FTPS et le SFTP.

en utilisant WinSCP, votre fichier batch ressemblerait à (pour 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

Et le lot fichier:

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

tout en utilisant toutes les fonctionnalités de WinSCP (en particulier fournir des commandes directement en ligne de commande et %TIMESTAMP% syntaxe), le fichier batch simplifie à:

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"

Pour les fins de l' -hostkey commutateur, reportez-vous à verifier la touche host dans script.

plus facile que d'assembler manuellement le fichier script/batch est de configurer et de tester les paramètres de connexion dans GUI WinSCP et puis de l' générer le script ou le fichier batch pour vous:

Generate batch file

il suffit de modifier le nom du fichier source (utilisez le %TIMESTAMP% syntaxe comme montré précédemment) et le chemin vers le fichier journal.


pour les FTPS, remplacer le sftp:// dans le open commandeftpes:// (explicit TLS / SSL) ou ftps:// ( TLS implicites / SSL). Supprimer la -hostkey switch.

winscp.com /log=ftpcmd.log /command ^
    "open ftps://ftp_user:password@ftp.MyFTPSite.com -explicit" ^
    "put c:\directory\%1-export-%%TIMESTAMP#yyyymmdd%%.csv" ^
    "exit"

vous devrez peut-être ajouter le -certificate switch, si le certificat de votre serveur est ce n'est pas émis par une autorité de confiance.

encore une fois, comme avec le SFTP, plus facile est de configurer et de tester les paramètres de connexion dans GUI WinSCP et ensuite de le faire générer le script ou le fichier batch pour vous.


Voir complet guide de conversion de ftp.exe to WinSCP.

Vous lire aussi l' Guide d'automatiser des transferts de fichiers vers un serveur FTP ou SFTP serveur.


Remarque: à l'aide de %TIMESTAMP#yyyymmdd% au lieu de %date%: un format de %date% valeur de la variable est locale. Donc, assurez-vous de tester le script sur le même locale vous allez réellement utiliser le script. Par exemple sur mon site tchèque le %date% décide de čt 06. 11. 2014, ce qui pourrait être problématique lorsqu'il est utilisé comme une partie d'un nom de fichier.

Pour ce raison WinSCP supporte (paramètres régionaux-neutre) timestamp mise en forme en mode natif. Par exemple,%TIMESTAMP#yyyymmdd% décide de 20170515 sur n'importe quel endroit.

(je suis l'auteur de WinSCP)

30
répondu Martin Prikryl 2017-07-07 15:18:46

la commande FTP intégrée n'a pas de fonction de sécurité. Utilisez cUrl à la place. Il est scriptable, beaucoup plus robuste et a la sécurité FTP.

2
répondu Matt Williamson 2013-04-22 15:09:50
    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 ; 
-2
répondu Ram 2016-01-14 16:40:14