Voir un article

Transfert de fichiers via ssh : plus rapide et sans limite

Le volume à transférer est trop gros pour en faire une archive ? L'arborescence est trop complexe pour du FTP ? Vous voulez accélérer le débit par x10 par rapport à NFS ? Vous voulez utiliser une connexion sécurisée ssh ?

1/ utilisez les flux tar via un tunnel ssh (put)  :

cd dossierLocal
tar -cpf - . | (ssh serveurDistant "cd dossier; tar -xpf -")


Explication :
tar cpf - .  va produire 1 archive ('c' pour compress, 'p' pour preserve) du dossier courant '.' et envoyer le flux sur la sortie standard ('f -' pour file vers flux) ,
ce flux nous  leredirigeons via le tube '|' vers une connexion ssh vers le serveur distant,
cette connexion ssh va transmettre le flux à la commande entre en guillemets qui s'exécute sur le serveur distant , cad ici se placer dans un dossier puis lancer la commande tar en décompression (option x) , en préservant les droits (p) du flux reçu (f -)

Facile non ?



2/ Bien sur ça fonctionne aussi dans l'autre sens (get au lieu de put), pour récupérer une arborescence :

cd dossierlocal
(ssh serveurDistant "cd dossier;tar -cpf - . ") | tar -xpf -




3/ Pour accélérer encore les transferts (inutile sur des données djà compressées telles que photos ou vidéos ou ça ralentirait les transferts) , vous pouvez passer le flux via gzip   pour le compresser à la volée (inutile pour des jpeg et autres fichiers déjà compressés en natif) et donc diminuer le volume de data en transit sur le réseau entre les 2 machines  (car l'option c de tar ne compresse pas vraiment, il pack simplement), il suffit de rajouter l'option "z" à tar :

soit pour le get (depuis le pc local je vais récupérer les datas du serveur distant) :
cd dossierlocal; (ssh serveurDistant "cd dossier;tar -czpf - . ") | tar -xzpf -

et pour le put  (depuis le pc local j'envoie des datas vers le serveur distant ) :
cd dossierLocal; tar -czpf - . |(ssh serveurDistant "cd dossier; tar -xzpf -")



4/ Passez par des relais ssh :
Vous pouvez tout aussi facilement passer par plusieurs machines en cascade pour faire transiter le flux. Par ex la machine A peut passer par la machine B pour aller récupérer les fichiers sur la machine C. Dans ce cas depuis A :
(ssh B " ssh C 'cd dossier;tar -cpf - . ' ") | tar -xpf -

 

5/ contrôler le débit 

cd dossierLocal
tar -cpf - . | cstream -T 60 |(ssh serveurDistant "cd dossier; tar -xpf -")

(cf man cstream)

 



5 541 clics - Créé le 17/11/2011 par Tito - Modifié le 21/12/2016



Réagissez, commentez, discutez ...

Soyez le premier à réagir !



Partager ?

diaspora  G+  facebook  twitter  Digg  Yahoo  Delicious  Technorati  myspace


Voir d'autres articles en rapport avec celui-ci ?



Stats des clics sur cet article : cliquez ici »



Vous voulez contribuer et publier un article dans cette rubrique ?

Merci de vous identifier ou de vous créer un compte si ce n'est pas déjà fait.