Looking for Computer Science  & Information Technology online courses ?
Check my new web site: https://www.yesik.it !

La commande rsync est bien pratique pour synchroniser le contenu de deux répertoires. En utilisation de base, comme les autres r-commands (rsh, rcp, rlogin), rsync transmet les données en clair. Mais il est également possible de faire transiter celle-ci via SSH. Outre renforcer la sécurité de vos données, l'avantage est aussi de n'utiliser pour ce transfert que le port SSH (port 22) – sans nécessiter d'installer d'autre serveur ou d'ouvrir d'autres ports sur votre pare-feu.

Donc, histoire de me servir de pense bête, voici en quelques lignes comment transférer des fichiers de manière sécurisée avec rsync sur SSH.

Remarque:

L'utilisation de SSH devrait être le comportement par défaut à partir de rsync 2.6.0 (datant de janvier 2004). Néanmoins, l'utilisation explicite de l'option -e ssh reste une bonne habitude, notamment si vous êtes amené à écrire des scripts susceptibles de tourner sur des machines utilisant une ancienne version de rsync.

Transférer un fichier

Pour cet exemple, imaginons que je veuille transférer le fichier hello de mon répertoire courant vers le dossier destination situé dans mon répertoire personnel sur une machine distante. La machine distante est faraway. Sur laquelle je dispose d'un compte au nom de sylvain. Un serveur SSH tourne sur la machine distante et le port 22 est ouvert sur le firewall. Ça fait beaucoup de pré-requis? Non: c'est une configuration très classique...

Bref, voici la commande magique pour copier mon fichier:

sh$ rsync -e ssh hello sylvain@faraway:destination

L'option -e permet de spécifier le shell de transport. C'est à dire le programme qui sera utilisé par rsync pour exécuter des commandes sur la machine distante. Ici, comme vous le voyez, j'utiliserai ssh. Remarquez aussi que la destination est spécifiée sous la forme utilisateur@hote:destination. Où destination est un chemin relatif au répertoire de base de l'utilisateur. Si destination n'existe pas, elle est créé par rsync.

Bien sûr, on peut copier dans l'autre sens simplement en inversant les spécifications source et destination.

Remarque:

Pour utiliser un chemin absolu, il suffit de le préfixer par / (slash) comme pour n'importe quel chemin Unix. Ainsi, pour copier un fichier dans le répertoire /tmp de la machine destination, on utilisera la commande suivante:

sh$ rsync -e ssh hello sylvain@faraway:/tmp

Et pour copier le fichier dans /tmp sous un autre nom, on utilisera:

sh$ rsync -e ssh hello sylvain@faraway:/tmp/bonjour

Synchroniser deux dossiers

Celui-ci est piégeur. En effet, en mode récursif (option -r) rsync copie des fichiers et dossiers vers un dossier.

Ainsi, pour synchroniser mon dossier travail sur une machine distante, je serais tenté d'utiliser la commande suivante:

# Tente de synchroniser deux dossiers.
# CA NE MARCHE PAS!
sh$ rsync -r -e ssh travail sylvain@faraway:travail

Malheureusement, cette commande ne fait pas ce que je souhaite. En fait, elle a copié le dossier travail et son contenu dans le dossier travail de la machine distante. Autrement dit, les fichiers contenus dans le dossier travail/ original se retrouvent sur la machine distante dans travail/travail/. Moi, ce que je veux, c'est ne copier que le contenu du dossier source dans le dossier destination.

Plusieurs options pour arriver à cela. Dans mon ordre croissant de préférence:

# Copier le dossier travail et son contenu dans le répertoire de base 
# de l'utilisateur distant
sh$ rsync -r -e ssh travail sylvain@faraway:.
# Copier les fichiers et dossiers *non-cachés* du répertoire travail
# vers le répertoire travail distant
sh$ rsync -r -e ssh travail/* sylvain@faraway:travail
# Copier le *contenu* du répertoire travail
# vers le répertoire travail distant
sh$ rsync -r -e ssh travail/ sylvain@faraway:travail

Si vous avez du mal à distinguer cette dernière option de l'exemple qui ne marchait pas en début de cette section, la seule différence réside dans la présence d'un slash à la fin du dossier source. Cela indique à rsync de copier le contenu du dossier source – et pas le dossier lui-même.

La raison pour laquelle cette dernière option a ma préférence, c'est qu'elle synchronise tous les fichier, y compris les fichiers cachés.

Ressources