Navigation

Versions

13 mars 2012 : création
19 mai 2015 : correction doc scp

Contactez-nous

Kitpages
17 rue de la Frise
38000 Grenoble
tel : 04 58 00 33 81

Par Philippe Le Van (twitter accountplv) Dernière mise à jour : 19 mai 2015

Copier des répertoires entre machines avec ssh

Introduction

Il y a 15 moyens de copier des répertoires entre machines distantes quand on n'a que des accès ssh. Voyons quelques solutions avec leurs avantages respectifs.

Copie simple avec SCP

La copie la plus banale, l'utilisation de scp

Avantages :

  • C'est simple et direct

Défauts :

  • C'est lent quand on a énormément de petits fichiers

 

cd le_repertoire_de_copie
scp -rp user@host.com:/toto/titi_dir ./
# note :
# -r permet de faire une copie récursive du répertoire titi_dir/
# -p permet de préserver les droits et date des fichiers

Copie avec tar et ssh

C'est une ruse assez sioux

Avantages :

  • C'est rapide même avec beaucoup de petits fichiers
  • Ca peut compresser les données
  • ça conserve les dates, users, droits

Défault :

  • La syntaxe barbare est quasiment impossible à retenir par coeur
# on se loggue sur la machine destination et on tape :
(ssh user@host.com 'cd /data/dir_a_copier && tar cf - *') | (cd /xxx/dir_destination && tar -xf -)

# et si vous voulez compresser, ajoutez dans les paramètres du tar la compression que vous souhaitez (z, j,...)
(ssh user@host.com 'cd /data/dir_a_copier && tar zcf - *') | (cd /xxx/dir_destination && tar -zxf -)

# Pour lancer la tâche en arrière plan
nohup sh -c "(ssh user@host.com 'cd /data/dir_a_copier && tar zcf - *') | (cd /xxx/dir_destination && tar -zxf -)" &

Copie avec rsync et ssh

Très bien pour synchroniser des répertoires entre 2 machines. rsync commence par regarder les différences entre les répertoires et ne copie que les fichiers qui ont été modifiés

# aller sur la machine destination et lancer
# les commandes suivantes :
cd /data/dir_destination
rsync -vazu -e ssh user@host.com:/data/dir_a_copier/ ./

Utilisation de rsync et ssh avec exclusion de fichiers

Avec rsync, on peut en plus séléctionner de façon assez fine la liste des fichiers/répertoires que l'on souhaite synchroniser ou non.

# Utilisation de rsync avec exclusion
# dans cet exemple, on se loggue sur la machine source
rsync -vazu -e ssh \
--exclude "/**/CVS" \
--include "*/" \
--include "*.jsp" \
--exclude "*" \
/xxx/le_repertoire_a_copier/* user@host.com:/xxx/le_repertoire_destination_a_distance

Commentaires

Ajouter un commentaire
Re: attention - confusion scp
En fait, c'est entre les 2 : ça ne conserve effectivement pas les users, par contre, ça conserve les droits: 

     -p      Preserves modification times, access times, and modes from the original file.

Du coup, je vais corriger le tuto, merci pour ta vigilance :-)

Philippe
attention - confusion scp
"-p permet de préserver les users, droits et date des fichiers"
Faux. -p ne permet pas de préserver les privilèges. juste les timestamp fichier.
Le mieux c'est d'utiliser rsync, ou, de faire un tar avant transfert
rsync vers un ssh sur un port particulier
supposons que ssh tourne sur un port particulier, comment spécifier ce port dans la commande rsync ?

rsync -vazu -e "ssh -p 310" user@host.com:/data/dir_a_copier/ ./