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