Synchronisation Rsync entre Windows et Linux
Sommaire
I. Présentation
Lors de la mise en place de processus de sauvegarde, il arrive souvent d'être confronté aux problématiques de la différence de support des protocoles et des logiciels entre différents systèmes d'exploitation, c'est par exemple le cas entre les systèmes Linux et Windows. Linux présente nativement des outils très rapides et simples pour l'échange de fichier comme SSH, SCP ou Rsync par exemple. Les technologies présentes dans Windows s'interfacent quant à elles très bien entre elles mais il peut arriver que l'on ait besoin d'une synchronisation simple, rapide et surtout automatique dans le cadre de sauvegarde entre OS Linux et Windows.
Dans ce tutoriel, nous allons étudier la mise en place d'un processus automatique de sauvegarde des fichiers provenant d'un serveur Linux vers une machine Windows, nous allons voir comment automatiser cette tâche. A noter que le tutoriel est aussi valable dans le cas d'un échange ponctuel (non automatisé). Nous allons également veiller à ce que le tout se fasse de manière sécurisée, sans exposer les machines ou les données à des risques.
II. Présentation de l'architecture
Pour illustrer et mettre en place le tutoriel, nous travaillerons sur l'architecture simplifiée suivante :
Nous avons donc un serveur Linux qui héberge par exemple un site web et nous allons vouloir backuper (sauvegarder) le contenu de ce site web sur notre Windows, ponctuellement ou régulièrement. Nous partons donc du principe que les machines Linux et Windows sont déjà en place et qu'elles sont disponibles sur le réseau.
Note : La procédure décrite peut également être utilisée au travers de plusieurs réseaux ou internet par exemple.
III. Installation de cywgin
Pour permettre à notre machine Windows de "parler" avec notre serveur Linux via Rsync, nous allons installer le logiciel Cygwin. Cygwin est une collection de logiciels libres permettant à des machines sous OS Windows d'émuler un système Unix. Plus clairement, c'est ce qui va nous permettre d'installer Rsync sur notre Windows. Nous allons donc sur le site officiel récupérer le setup en version 32 ou 64 bits selon votre OS : Site officiel de Cygwin
Une fois le setup téléchargé , il nous suffit de l'exécuter. On sélectionnera, par soucis de simplicité, "Install from Internet" sur cette fenêtre :
On devra également sélectionner une source, la première suffit généralement :
Bien heureusement, nous n'avons pas besoin d'installer tout un système Unix sur notre machine Windows. Nous pouvons choisir d'installer uniquement les paquets très basiques plus ceux dont nous avons besoin. Ici, nous avons besoin d'un Shell, du protocole SSH et de Rsync. Nous allons donc arriver sur la fenêtre "Select Package". Il faut développer la partie "Net" puis descendre jusqu'à "openssh", on va alors cliquer une fois sur le "Skip" de la ligne "openssh" afin de signaler que nous voulons l'installer, nous faisons la même chose pour "rsync" quelques lignes plus bas :
On va ensuite développer de la même manière "Shells" et vérifier que "bash" est bien coché également, le faire si ce n'est pas le cas :
Nous cliquerons ensuite sur "Suivant", Cygwin va nous demander confirmation pour l'installation des différentes dépendances :
On attend donc ensuite que Cygwin s'installe pour pouvoir l'utiliser. A la fin de l'installation, nous aurons un répertoire Cygwin ou cygwin64 à la racine de "C:" dans lequel nous pourrons trouver un "Cygwin.bat" nous donnant accès à un shell Linux :
On s'approche doucement de ce que nous souhaitons faire. Passons maintenant à la partie authentification et sécurité.
IV. Création et échange de clé
Nous allons à présent mettre en place un processus d'échange de clés SSH entre nos deux machines, cela va bien sûr accroître la sécurité de l'authentification et la sécurité des échanges mais va également permettre à notre machine Windows de s'authentifier de façon automatisée sur la machine Linux car le mot de passe ne sera plus demandé. (voir ce tutoriel pour plus de détails à ce sujet : Authentification SSH par clés)
Sur notre terminal Cygwin, nous allons donc saisir les commandes suivantes :
On va commencer par importer les groupes Windows, sans cela, le SSH ne voudra pas fonctionner :
mkgroup
Création de la clé SSH en 2048 bits :
ssh-keygen -t rsa -b 2048
On va alors ajouter un groupe au répertoire utilisateur et également changer les droits sur le dossier .ssh
chgrp Système ~/ -Rf chmod -Rf 700 ~/.ssh
Vous pourrez alors mettre une passphrase qui est l'équivalent d'un mot de passe, cependant cela n'ira pas dans le sens de l'automatisation car il faudra saisir la passphrase à la main lors d'une demande de connexion.
Note : Si besoin, installez openssh-server sur votre serveur Linux, pour Debian : "apt-get install openssh-server"
On va ensuite envoyer notre clé publique sur le serveur Linux pour que celui-ci sache nous reconnaître et nous laisser passer :
ssh-copy-id ~/.ssh/id_rsa.pub [email protected]
Il faudra alors saisir le mot de passe de l'utilisateur du serveur Linux, ce sera la seule fois où il sera demandé.
Note : Pensez à changer l'IP du serveur dans la ligne de commande en fonction de votre infrastructure et également l'utilisateur "root" si vous n'avez pas besoin de tout les privilèges sur le serveur Linux.
On pourra alors tenter une première connexion sur le serveur Linux sans mot de passe, depuis le terminal Cygwin :
ssh [email protected]
On pourra alors se connecter à notre serveur Linux, ce qui ouvre la voie pour Rsync.
V. Échange avec Rsync
Nous allons maintenant vouloir backuper notre répertoire (par exemple "/var/www") du serveur Linux vers notre machine Windows (dans "C:\backup" par exemple)
Note : Il faut savoir que dans Cygwin, les répertoires et disques Windows sont présents dans /cygdrive. On y retrouve un répertoire /cygdrive/c qui correspond à "C:" par exemple :
On utilisera donc la ligne de commande suivante dans Cygwin :
rsync -avzu [email protected]:/var/www /cygdrive/c/backup
Résultat :
Et voila, on vient de faire notre synchronisation entre Windows et Linux sans demande de mot de passe (via clé SSH).
VI. Automatisation
Pour automatiser cette tâche, nous pouvons faire un script dans Cygwin par exemple un synchro.sh dans ~/ (qui équivaut à /home/utilisateur_courant/) et dans lequel nous mettrons notre précédente ligne avec un sheeebang :
#!/bin/bash rsync -avzu [email protected]:/var/www /cygdrive/c/backup
On donnes les droits d'exécution à ce script :
chmod +x synchro.sh
On peut alors l'exécuter directement depuis un terminal Windows, ce qui va nous permettre de scripter cela simplement, il nous suffira de faire un fichier "synchro.cmd" contenant la ligne d'exécution suivante :
C:\cygwin64\bin\bash.exe --login -i '/home/Neaj/synchro.sh'
On pourra par exemple positionner le .cmd sur le bureau pour n'avoir qu'à double cliquer pour synchroniser le tout :
Pour planifier l'exécution du script au démarrage de la machine Windows par exemple, il faudra ajouter une GPO sur l’ordinateur. Pour ceci allez dans Démarrer, Exécutez et saisissez : "gpedit.msc"
Allez ensuite dans “Configuration utilisateur” > “Paramètres Windows” > “Scripts” > “Ouverture de session” : on cliquera ensuite sur "Ajouter" à droite de la fenêtre pour aller cibler notre script "synchro.cmd".
Super, c’est pratiquement ce que je veux faire mais à l’inverse!
Je m’explique: sauvegarder les données de mon PC de travail (en Windows 7 x64) vers mon NAS OMV x64 ( en Debian).
Mais:
1/ je n’arrive pas à adapter votre tuto pour ce faire et
2/ je rencontre un problème à l’install de Rsync (ou cwRsync) sur Windows: une fenêtre cmd apparait furtivement et plus rien, à part désinstaller dans la liste des programmes.
Et bien sûr, je ne trouve pas les infos sur le net.
Étant un peu noob pour les backups/synchros, merci d’avance de bien vouloir m’aiguiller (liens, pdf, ou autres)
Bonjour,
Je t’invite à utiliser notre Forum pour résoudre ton problème, plus de personnes pourront surement t’aider à trouver une solution ! 🙂
Voici l’URL : http://www.it-connect.fr/forum
J’espère que le post est encore sur le forum 🙂
je cherche à faire exactement la même chose : sauvegarde du répertoire de documents importants et de photo perso vers mon NAS OMV sur Odroid-C2 🙂
Merci
Merci
Le serveur pour s’inscrire est temporairement désactivé!
J’essaierai de nouveau plus tard.
Dois-je poster ma demande dans la rubrique « Vos projets?
@ pluche.
Bonjour,
Avez-vous trouvé une solution ?
Si oui, avez-vous encore des informations sur le sujet ?
En vous remerciant,
extraternet
Bonjour,
Je viens d’installer cygwin sur ma station windows 7 et un raspberry PI 2; tout fonctionne très bien jusqu’à la phase V. C’est à dire que je réussis à transférer tous mes fichiers en mode commande. Par contre lorsque j’essaie l’automatisation de mes transferts par activation d’un script j’ai systématiquement ces messages:
$ ./synchro.sh -v
sending incremental file list
rsync: mkdir « /media/www-data\#015 » failed: Permission denied (13)
rsync error: error in file IO (code 11) at main.c(605) [Receiver=3.0.9]
rsync: connection unexpectedly closed (143 bytes received so far) [sender]
rsync error: error in rsync protocol data stream (code 12) at io.c(226) [sender=3.1.1]
Après exécution du script suivant:
#!/bin/bash
rsync -avzu /cygdrive/c/quotidien [email protected]:/media/www-data
Pourriez vous me donner quelques conseils pour trouver la provenance du problème.
Avec tous mes remerciements
@BM
Tu n’as pas assez de droit sur le dossier www-data .
fait un chmod 777 /media/www-data
Merci pour ce tuto. Habitué à linux, je me régale. La synchro en mode sauvegarde fonctionne. Mais en mode restore 1 fichier, je suis habitué à fish:// sous dolphin ( mode gui) mais ici, on fait comment ?
Bravo et merci pour ce tuto
Petite coquille pour les puristes :
« On donnes les droits d’exécution à ce script : »
=>
« On donne les droits d’exécution à ce script : »
Merci pour ce tuto bien sympa, qui m’a fait renoué des liens avec cygwin, à l’époque c’était une vrai merde pour l’installer et l’utiliser …
J’ai eu un souci dans le tuto, pour l’échange des clefs il m’a répondu « ERROR: Too many arguments. »
Pour ceux qui ont ce souci il faut ajouter le paramètre « -i » avant le ~/.ssh.id_rsa.pub pour préciser ce qu’on donne à manger à la commande 🙂
merci maxime j’avais le même problème, résolu par ton commentaire 🙂
Bonjour les ami(es).tuto vraiment intéréssant. je suis amateur,je l’essaye et vous reviens
L’article date un peu mais comme il n’est jamais trop tard pour remercier, merci pour cet article qui m’a été bien utile pour sauvegarder des dumps SQL d’un serveur sous Debian vers un serveur sous Windows.
J’ai juste rajouté le paquet « Nano » car Vi c’est une purge que je n’arrive pas à utiliser.