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 :

RSYNCWL01

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èmeUnix. 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  :

Création de la clé SSH en 2048 bits :

On va alors ajouter un groupe au répertoire utilisateur et également changer les droits sur le dossier .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 :

jfrullier@PORTABLE54 ~

$ ssh-copy-id admin@82.242.232.104 -p 2422
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
admin@82.242.232.104's password:
Number of key(s) added: 1
Now try logging into the machine, with: "ssh -p '2422' 'admin@82.242.232.104'"
and check to make sure that only the key(s) you wanted were added.

 

jfrullier@PORTABLE54 ~

$

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 :O

 

Si ssh persiste à vous demander la passphrase, essayez ceci:

You could run ssh-agent. See here for a discussion.

The short version that worked for me (in bash):

$ ssh-agent
SSH_AUTH_SOCK=/tmp/ssh-rnRLi11880/agent.11880; export SSH_AUTH_SOCK;
SSH_AGENT_PID=11881; export SSH_AGENT_PID;
echo Agent pid 11881;

I took the 3 lines it echoes out, and executed them. Another way to do that is take the output of -s:

$ eval `ssh-agent -s`

Then I added my credentials to it:

$ ssh-add ~/.ssh/id_rsa
Enter passphrase for /home/me/.ssh/id_rsa: 
Identity added: /home/me/.ssh/id_rsa (/home/me/.ssh/id_rsa)

Now the agent supplies the credentials instead of me having to type in my passphrase.

I believe ssh-agent goes away when the shell does, so this should be scripted upon startup for maximum convenience. The link I shared describes scripting as well

n pourra alors se connecter à notre serveur Linux, ce qui ouvre la voie pour Rsync.

V. Échange avec Rsync

Nous allons maintenant vouloir sauvegarder 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 :

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 :

On donnes les droits d’exécution à ce script  :

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 :

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

Sauvegarde d’un dossier Windows vers le serveur Linux

Par exemple je copie le dossier c:\outils de mon Windows, vers le serveur Linux, qui répond sur le port 2422:

jfrullier@PORTABLE54 ~
$ rsync -av -e 'ssh -p 2422' /cgydrice/c/outils admin@82.242.232.104
sending incremental file list
rsync: change_dir "/cgydrice/c" failed: No such file or directory (2)
sent 20 bytes received 12 bytes 64.00 bytes/sec
total size is 0 speedup is 0.00
rsync error: some files/attrs were not transferred (see previous errors) (code 23) at main.c(1165) [sender=3.1.1]
jfrullier@PORTABLE54 ~

Leave a Reply

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

Blue Captcha Image
Refresh

*

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.