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.
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:
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)
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.
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 ;