web-dev-qa-db-fra.com

FTP sécurisé à l'aide d'un script batch Windows

J'ai actuellement des scripts batch sur différents serveurs qui transfèrent un fichier csv vers un serveur FTP à un emplacement 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 exiger une transmission sécurisée, comment mettre à jour mon script?

Merci.

18
etm124

Tout d'abord, assurez-vous de bien comprendre, si vous devez utiliser FTP sécurisé (= FTPS, selon votre texte) ou [~ # ~] sftp [~ # ~] (selon la balise que vous avez utilisée).

Aucun n'est pris en charge par la ligne de commande Windows ftp.exe. Comme vous l'avez suggéré, vous pouvez utiliser WinSCP . Il prend en charge FTPS et SFTP.

En utilisant WinSCP, votre fichier de commandes ressemblerait (pour SFTP):

echo open sftp://ftp_user:[email protected] -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 fichier batch:

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

Bien que vous utilisiez toutes les capacités de WinSCP (en particulier fournissant des commandes directement sur la ligne de commande et le %TIMESTAMP% syntaxe ), le fichier batch se simplifie pour:

winscp.com /log=ftpcmd.log /command ^
    "open sftp://ftp_user:[email protected] -hostkey=""server's hostkey""" ^
    "put c:\directory\%1-export-%%TIMESTAMP#yyyymmdd%%.csv" ^
    "exit"

Dans le but de -hostkey switch, voir vérification de la clé Host dans le script .

Plus simple que d'assembler manuellement le fichier de script/lot est de configurer et de tester les paramètres de connexion dans l'interface graphique de WinSCP, puis de le faire générer le script ou le fichier de commandes pour vous :

Generate batch file

Tout ce dont vous avez besoin pour Tweak est le nom du fichier source (utilisez le %TIMESTAMP% syntaxe comme indiqué précédemment) et le chemin d'accès au fichier journal.


Pour FTPS, remplacez le sftp:// dans la commande open avec ftpes:// ( TLS/SSL explicite ) ou ftps:// ( TLS/SSL implicite ). Retirer le -hostkey commutateur.

winscp.com /log=ftpcmd.log /command ^
    "open ftps://ftp_user:[email protected] -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 non émis par une autorité de confiance .

Encore une fois, comme avec le SFTP, il est plus facile de configurer et de tester les paramètres de connexion dans l'interface graphique de WinSCP, puis de le faire générer le script ou le fichier de commandes pour vous .


Voir un guide de conversion complet de ftp.exe vers WinSCP .

Vous devriez également lire le Guide pour automatiser les transferts de fichiers vers un serveur FTP ou un serveur SFTP .


Remarque concernant l'utilisation de %TIMESTAMP#yyyymmdd% au lieu de %date%: Un format de %date% la valeur de la variable est spécifique aux paramètres régionaux. Assurez-vous donc de tester le script sur les mêmes paramètres régionaux que vous allez réellement utiliser le script. Par exemple, sur mes paramètres régionaux tchèques, le %date% se résout en čt 06. 11. 2014, ce qui pourrait être problématique lorsqu'il est utilisé dans le cadre d'un nom de fichier.

Pour cette raison, WinSCP prend en charge nativement le format d'horodatage (indépendant des paramètres régionaux) Par exemple %TIMESTAMP#yyyymmdd% se résout en 20170515 sur tous les paramètres régionaux.

(je suis l'auteur de WinSCP)

33
Martin Prikryl

La commande FTP intégrée n'a pas de fonction de sécurité. Utilisez plutôt cUrl . Il est scriptable, beaucoup plus robuste et dispose d'une sécurité FTP.

2
Matt Williamson