Departement de Mathematique d'Orsay

Synchronisation automatique de vos fichiers sur une machine distante


Pour effectuer une synchronisation manuelle de vos fichiers locaux sur une machine distante dans le répertoire backup, utilisez la commande suivante
machinelocale:~# rsync -avz -e "ssh -i ~/votre_login/.ssh/id_$dsa.pub" ~/ votre_login@serveurdistant:~/backup 

Pour exécuter cette commande,vous devez au préalable lancer un Terminal sous Mac Os X/un xterm ou gnome-terminal sous Unix.
Sous Windows,vous devez suivre cette documentation : http://www.brunop.be/rsync-backup-de-windows-vers-linux-50.html à partir de la 2eme partie Configurer le PC Windows.

Vous pouvez exécuter la commande Unix précédente dans une crontab sous Unix/Linux/MacOsX.

Pour cela il vous suffit :

1/ de créer un fichier rsync.sh avec vi ou un editeur texte contenant les lignes suivantes :
#!/bin/bash 
rsync -avz -e "ssh -i ~/votre_login/.ssh/id_dsa.pub" ~/ votre_login@serveurdistant:~/backup
Dans un terminal, tapez la commande suivante :
machinelocale:~# chmod +x rsync.sh
pour rendre le fichier exécutable.

2/ copier ce fichier dans le répertoire /etc/cron.hourly en faisant dans un terminal
machinelocale:~# cp rsync.sh /etc/cron.hourly
pour que la sauvegarde de fasse toutes les heures de façon incrémentale.
Pour créer le fichier ~/.ssh/id_dsa.pub nécessaire pour ne pas saisir de mot de passe vous devez suivre ce qui est indiqué à la suite :

Etape 1 : générer la clé publique (machine locale)

Connectez-vous avec votre login sur la machine locale, puis générez la clé :

ssh-keygen -t dsa -b 1024
machinelocale:~# ssh-keygen -t dsa -b 1024
Generating public/private dsa key pair.
Enter file in which to save the key (/home/votre_login/.ssh/id_dsa): [TOUCHE ENTREE]
Enter passphrase (empty for no passphrase):[TOUCHE ENTREE]
Enter same passphrase again:[TOUCHE ENTREE]
Your identification has been saved in /home/votre_login/.ssh/id_dsa.
Your public key has been saved in /home/votre_login/.ssh/id_dsa.pub.
The key fingerprint is:
44:f8:69:4b:ad:9f:bd:42:dd:3d:17:04:0d:f0:b9:81 votre_login@machinelocale
The key's randomart image is:
+--[ DSA 1024]----+
|       ..  ..o+  |
|      ..    o .o |
|       ..o E +.  |
|       .= .   o. |
|       oSo . o ..|
|        o . . ..o|
|         o o    o|
|          + .    |
|           ...   |
+-----------------+
machinelocale:~#

Cela va générer deux fichiers dans le répertoire /home/votre_login/.ssh/ :

Attention : n’entrez aucun passphrase, validez par entrée. Si vous entrez un passphrase il devra être entré à chaque demande de connexion, nous perdons le bénéfice de l’automatisation ;)


Cette méthode fonctionne mais n'est pas très sécurisée. Nous vous conseillons d'utiliser une passphrase non vide pour des raisons de sécurité.

Pour saisir une seule fois la passphrase et eviter ainsi de la resaisir à chaque fois, vous devez faire comme suit à l'ouverture de votre session dans un terminal :
machinelocale:# eval `ssh-agent`
ssh-add .ssh/id_dsa
Enter passphrase for .ssh/id_dsa: <pass><return>
Identity added: .ssh/id_dsa (.ssh/id_dsa)
Une fois la saisie de la passphrase faite avec cette méthode,elle reste valable le temps de la session.

Recommendations pour plus de sécurité :

Note : N’utilisez que des clés de 1024 bits maximum, vous pourrez sinon avoir le message d’erreur : « DSA keys must be 1024 bits ».

Etape 2 : transférer la clé publique dans le serveur distant

Plusieurs méthodes s’offrent à vous pour transférer la clé publique vers la machine distante, nous allons toutes les voir en détail.

Méthode A : Transfert via ssh-copy-id

La commande ssh-copy-id permet d’installer votre clé publique sur une machine distante :

machinelocale:~# ssh-copy-id -i /home/votre_login/.ssh/id_dsa.pub votre_login@serveurdistant
votre_login@serveurdistant's password:
Now try logging into the machine, with "ssh 'votre_login@serveurdistant'", and check in:

.ssh/authorized_keys

to make sure we haven't added extra keys that you weren't expecting.

machinelocale:~#

L’intérêt de cette commande est double puisqu’elle place la clé directement dans le serveur distant et elle applique également les bons droits (chmod) sur le répertoire ~/.ssh ainsi que sur le fichier authorized_keys.

Liens utiles : QTH (pour ssh-copy-id)

Méthode B : Transfert via SCP

Pré-requis : connectez-vous en SSH sur le serveur distant, puis vérifiez que le répertoire ~/.ssh existe ainsi que le fichier authorized_keys Si ce n’est pas le cas, les créer et appliquer les bons droits :

serveurdistant:# mkdir ~/.ssh
chmod 700 ~/.ssh
touch ~/.ssh/authorized_keys
chmod 600 ~/.ssh

Vous pouvez ensuite envoyer la clé publique du serveur local en utilisant le de transfert SeCure coPy (SCP) :

scp ~/.ssh/id_dsa.pub votre_login@serveurdistant:/home/votre_login/clelocale.pub
machinelocale:~# scp ~/.ssh/id_dsa.pub votre_login@serveurdistant:/root/clelocale.pub
The authenticity of host 'serveurdistant (82.0.1.2)' can't be established.
RSA key fingerprint is 17:5d:99:24:b5:e1:b0:3a:98:e9:90:59:0d:1e:c6:9c.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'serveurdistant,82.0.1.2' (RSA) to the list of known hosts.
votre_login@serveurdistant's password:
id_dsa.pub                                                                     100%  608     0.6KB/s   00:00
machinelocale:~#

A la question « Are you sure you want to continue connecting » bien répondre yes (en toutes lettres).

Ajoutons ensuite la clé dans le fichier ~/.ssh/authorized_keys :

cat /home/votre_login/clelocale.pub >> ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys
rm -f /home/votre_login/clelocale.pub

Liens : Joël Brogniart, NotMyIdea (Alexis Métaireau)

Méthode C : Transfert via SSH + commande (manuel)

Réservée aux informaticiens ultimes, cette technique permet en une ligne de commande de faire tout le boulot, elle ressemble un peu à la commande ssh-copy-id puisqu’elle permet d’écrire dans la valeur de la clé stockée localement dans le serveur distant ;)

ssh votre_login@serveurdistant "echo $(cat ~/.ssh/id_dsa.pub) >> .ssh/authorized_keys"

Pensez également â faire un coup de chmod par mesure de sécurité :

cat /home/votre_login/clelocale.pub >> ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys
rm -f /home/votre_login/clelocale.pub