PROJET AUTOBLOG


IT-Connect

Site original : IT-Connect

⇐ retour index

Synchronisation Rsync entre Windows et Linux

vendredi 20 juin 2014 à 09:00

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 :

RSYNCWL01

A noter que les deux machines peuvent être des serveurs ou des postes client, cela ne change pas le processus à mettre en place et les possibilités de sauvegarde.

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 :

InstallCygwin01

On devra également sélectionner une source, la première suffit généralement :

InstallCygwin02

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 :

InstallCygwin03

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 :

InstallCygwin04

Nous cliquerons ensuite sur “Suivant”, Cygwin va nous demander confirmation pour l’installation des différentes dépendances :

InstallCygwin05

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 :

RSYNCWL02

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 root@192.168.1.10

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 root@192.168.1.10

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 root@192.168.1.10:/var/www /cygdrive/c/backup

Résultat :

RSYNCWL03

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 root@192.168.1.10:/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 :

RSYNCWL04

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“.