Récupération SFTP automatique sous Windows avec WinSCP

Script SFTP automatique d’un serveur GNU/Linux distant sous Windows avec les fonctionnalités de scripting de WinSCP.

Il y a quelque temps maintenant je suis passé à un serveur Kimsufi SSD, ce qui a bien augmenté ses performances  au détriment de la capacité de stockage. Mon plan de sauvegarde (du système et des sites hébergés) a donc été modifié pour garder moins de backups sur le serveur en supprimant les plus anciens. Suite à ce constat, j’ai décidé d’automatiser le téléchargement des backups sur ma machine locale, mais sous Windows on a pas facilement un rsync ou du ssh à porté de main. Après un peu de recherche j’ai découvert que le client FTP/SFTP WinSCP était facilement scriptable, ceci ajouté à une tâche planifiée, j’avais ma solution de download de sauvegardes sous Windows.

Le principe est très simple, nous allons écrire un script WinSCP qui sera appelé par un batch Windows.

Script WinSCP

Voici un exemple de scripting WinSCP, à mettre dans un fichier texte genre backup_ftp.txt  :

open sftp://username:xxxxxxx@monserveur.net/ 
    -hostkey="ssh-rsa 2048 fc:6d:bc:4d:76:9d:08:4e:7e:31:56:45:d9:a4:97:22"
cd /home/username/backups/
option transfer binary
get -neweronly *.tgz c:\Users\win-username\backups\
close
exit

 

Plutôt explicite non? Ligne par ligne :

  1. Ouverture d’une session SFTP sur le serveur distant.
  2. Déplacement dans le répertoire des fichiers à récupèrer.
  3. Quelques options de transfert.
  4. On récupère les nouveaux fichiers uniquement ayant l’extension TGZ avec la commande get
  5. On ferme la connexion.

Pour la partie hostkey de l’ouverture de session, WinSCP permet de facilement la trouver. Pour cela il faut se connecter sur le serveur, puis aller dans Session > Informations sur le serveur/protocole et dans le premier onglet, il suffit de recopier la valeur sous Empreinte digitale du serveur hôte.

Trouver la clé du serveur dans WinSCP
Trouver la clé du serveur dans WinSCP

 

 

 

 

 

 

 

 

 

 

Les scripts WinSCP permettent de faire beaucoup de choses, se référer à la liste des commandes disponibles pour avoir un aperçu exhaustif des possibilités.

Script CMD

Le script Windows va invoquer la commande winscp.exe  avec en option le chemin vers notre fichier de script, je l’ai nommé download_backups.cmd  :

"C:\Program Files (x86)\WinSCP\winscp.com" 
    /script=C:\Users\win-username\bin\backup_ftp.txt

 

C’est tout. Pour l’automatisation, il suffit de créer une tâche planifiée qui exécute notre script download_backups.cmd.

Plus tard nous verrons comment ajouter un log et envoyer le rapport par email en fin de récupération.

8 réflexions sur « Récupération SFTP automatique sous Windows avec WinSCP »

  1. Bonjour
    merci pour votre tuto mais pour un débutant j’aimerai savoir les étapes à suivre pour creer ces fichier .txt pour le scrypting et comment pouvoir les exécuter si c’est possible en détail merci à vous à savoir je suis débutante dans ts ça merci pour votre aide
    Cdlt

    1. Hello Reda, merci pour ton message.
      Qu’est ce que tu ne comprends pas ? As-tu créé les fichiers backup_ftp.txt et download_backups.cmd (en adaptant leur contenu pour tes besoins bien sur) ? Ensuite, tu doubles-clic sur le fichier download_backups.cmd pour l’exécuter.

  2. Merci pour votre réponse,
    voila donc en détail j’ai installer le WinScp apres j’ai créer un fichier .init en allant sur Option<<preference<<puis j'ai cocher sur enregistrement INI file qui se genere donc j'ai mis une copie à la racine C et une autre dans le dossier "C:\Program Files (x86)\WinSCP" en ajoutant un fichier winscp.txt ( ou j'ai ecrit ces instructions que j'ai trouver dans un autre site le voici http://www.tutos.eu/?n=5458 ) : donc j'ai mis en commentaire ce que j'ai pas compris
    winscp.txt /
    open sftp://username:xxxxxxx@monserveur.net/ """"""qu'est ce que je doit mettre ici le nom de mon raspberry??"""""
    # Interface 1
    cd /MonRepertoireSurServeurFTP ''''' j'ai pas compris cette commande""""
    lcd "C:\Repertoire sur disque local"
    #Copie des données en local
    get *.* ici je sais pas comment ecrire pour récuperer un dossier sous mon raspberry qui contient des photos
    # Disconnect
    close
    # Exit WinSCP
    exit

    puis j'ai creer comme vous l'avez dis le fichier.bat pour lancer le fichier.init et exécuter le .txt

    le fichier.bat
    "C:\Program Files (x86)\WinSCP\WinSCP.com" /ini=C:\WinScp.ini /console /script=C:\WinScpScript.txt
    mais quand j'excute ya rien qui se passe est ce qu'il faut mettre tous les fichier.txt .bat et . ini dans le meme dossier ou dans la racine C pour l'excusion
    merci j’espère que j'ai bien expliquer mon problème

    1. Je ne comprends pas la partie de création d’un fichier .ini. C’est inutile. Il suffit d’avoir WinSCP d’installé, rien à faire où à générer côté WinSCP.
      Pour prendre un exemple concret, dans mon cas les 2 fichiers (backup_ftp.txt et download_backups.cmd) sont dans un dossier bin dans mon dossier utilisateur, donc sous C:\Users\fabien\bin.
      Dans le fichier .txt, les lignes que tu n’as pas compris :

      open sftp://username:xxxxxxx@monserveur.net/
      Oui tu mets l’IP de ton RaspberryPi à la place de serveur.net, tu mets le nom d’utilisateur et le mot de passe de l’utilisateur du RaspberryPi.

      cd /MonRepertoireSurServeurFTP
      C’est pour se déplacer dans le répertoire sur le RaspberryPi que tu veux sauvegarder. Je ne le connais pas, donc tu adaptes, exemple : cd /home/username/photos/

      get *.*
      A cette étape, tu es dans le bon répertoire photos, donc tu te bornes à récupérer tout ce qu’il y a dedans avec cette commande get.

  3. D’accord donc les fichier je peux les mettre ou je veux l’essentiel lorsque je fais apel aux 2fichiers faut bien inscrire le chemin , et pour le get *.* donc j’ecris
    get c:\Users\USER\Desktop\plani
    afin de prendre le fichier de mon raspberry et le trasferer dans le dossier plani sur mon bureau est t il correcte
    merci pour votre aide

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *