netcat : je « déTAR » d’une machine vers l’autre

closeCet article a été publié il y a 12 ans 9 mois 5 jours, il est donc possible qu’il ne soit plus à jour. Les informations proposées sont donc peut-être expirées.

« déTAR » à distance

Pense-bête : j’ai un gros .tar sur un serveur, je dois l’extraire sur un autre serveur. MAIS, sur cet autre serveur, je n’ai pas la place pour récupérer le .tar puis le décompresser, c’est-à-dire stocker deux fois en terme d’espace.
Donc j’utilise netcat pour faire un « pipe » entre commande d’une machine à l’autre.

Une fois le programme netcat installé, peu importe par quel biais, et en considérant que vous n’avez pas de restriction réseau entre les 2 machines (sinon ouvrez le port ci-dessous en UDP), vous faites ceci :

Sur la machine cible, on prépare une socket en écoute, ici sur le port 12345 :

moi@destination:/ou/je/veux/ecrire$ netcat -l -p 12345 | tar xvf -

Sur la machine émettrice, on balance la purée dans le tuyau :

moi2@source:~$ cat monfichier.tar | netcat aladdin 12345

A adapter dans le cas d’un fichier .bz2 ou .gz, par exemple.

Recopie d’arborescence d’un serveur à l’autre

Une autre utilisation très courante est la suivante : recopier une arborescence d’un serveur à l’autre, sans utiliser rsync, scp etc. Pourquoi se passer de ces outils ? il y a des cas où on ne les a pas. Et puis là on évite le cryptage, tout ça, charge CPU, blablabla.
Ca donne :

dest$ nc -l p 12345 | tar x
src$ tar cvf - mon_arborescence | nc dest 12345

EDIT : truc bien crade : ça marche aussi pour injecter du SQL…

dest$ nc -l p 12345 | mysql -u monlogin -p
src$ cat test.sql | nc dest 12345

Attention à ce que vous faites là quand même.
Notez qu’au lancement de la commande sur la machine de destination, le mot de passe mysql est demandé tout de suite.

Voilà
A+

5 comments

  1. Cette astuce est idéale pour utiliser le plein potentiel d’une liaison de type gigabit. Le goulot d’étranglement redevient la vitesse des disques de part et d’autre et plus le réseau. Les transferts via ssh sont certes plus « pratiques » et sécurisés mais le surcoût en CPU fait qu’ils sont au final moins rapides.

  2. Tu peux faire la même chose avec un ssh beaucoup plus simplement :

    $ cat montar.gz | ssh mon_serveur_destination « cd /mon/rep/dest ; tar xfvz – »

    Tout ceci en une ligne et en utilisant des outils standards.

  3. En une ligne. Génial. Et avec un alias s=ssh c’est encore plus court
    A part ça la méthode avec netcat (nc pour economiser ses ptits doigts) présente d’autres intérêt voilà tout

    allez, qui a le temps de nous faire la mesure réseau et temps cpu, consommation électrique et optimise le tout en perl en bordelisant la syntaxe ?

  4. Salut,

    Sur un lien non sûr, l’outil cryptcat est parfait. même fonctionnalité que netcat avec le chiffrement en plus.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée.

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.