web-dev-qa-db-fra.com

Meilleur moyen de transférer des fichiers sur un réseau local entre deux ordinateurs Linux

Je souhaite transférer des fichiers (un dossier de musique) entre deux ordinateurs Linux. Après avoir cherché la meilleure façon de faire cela, j'ai vu qu'il y a beaucoup de façons de le faire. Je sais que cela a été demandé beaucoup , partout et tout le temps . Le principal problème avec cela est qu'il n'y a pas de consensus clair et récent sur la meilleure façon de faire cette tâche en 2011 pour les débutants sous Linux (même en fonction de certains paramètres).

Donc, dans l’esprit des sites Web Stack Exchange, je souhaite que cela ne soit pas lié à ma situation particulière, mais plutôt à un guide destiné à d’autres également sur la façon de transférer des fichiers entre deux ordinateurs Linux sur un réseau local. Je pense qu'un wiki serait utile pour beaucoup.

Voici ce que j'ai trouvé jusqu'à présent:

  • ssh
  • sshfs
  • scp
  • sftp
  • nfs
  • samba
  • donneur

Quel est le plus facile? Plus flexible? Le plus simple? Meilleure solution? Quels sont les avantages et les inconvénients de chacun? Y a-t-il d'autres (meilleures) options? Quels sont les paramètres pour choisir la meilleure méthode (la solution peut dépendre du nombre de fichiers, de la taille du fichier, de la facilité par rapport à la flexibilité, ...)?

75
jonallard

Dans un environnement Linux, à la fois pour la sécurité et la convivialité, ssh est la meilleure solution. SSH, SSHFS, SCP et SFTP, tels que vous les répertoriez, ne sont que des services différents fondés sur le protocole SSH. SCP est très facile à utiliser, il fonctionne comme le CP, mais vous pouvez fournir des noms d’utilisateur et d’ordinateur dans le chemin. Donc, nous pourrions faire un CP comme cp ~/music/ ~/newmusic/, mais nous pourrions tout aussi bien faire scp ~/music/ user@Host:~/newmusic pour l'envoyer à l'ordinateur nommé Host. C'est ça - nous n'avons pas besoin de mettre en place quelque chose. Vous serez invité à entrer le mot de passe du compte sur l'autre ordinateur si vous n'avez pas de certificat ou une autre authentification configurée (scp partage ces paramètres avec ssh, bien sûr).

SFTP est un outil qui facilite l'exécution de nombreuses opérations sur un système de fichiers distant. Il fonctionne comme un serveur FTP, mais il s'exécute via SSH; il est donc sécurisé et ne requiert qu'un serveur SSH. man sftp vous expliquera comment l'utiliser. Je n'utilise pas SFTP uniquement pour déplacer un dossier entre deux ordinateurs. C'est plus utile lorsque vous devez effectuer de nombreuses opérations, comme si vous réorganisiez des fichiers sur un autre ordinateur.

SSHFS étend simplement SFTP dans un système de fichiers: il vous permet de monter un hôte virtuel dans votre système de fichiers, de sorte que le contenu du réseau se déroule de manière totalement transparente. SSHFS est destiné aux configurations semi-permanentes, pas à un seul transfert de fichier. La mise en place nécessite un peu plus d’efforts, que vous pouvez lire sur le site Web du projet .

Si vous avez besoin de travailler dans un environnement de système d'exploitation mixte, Samba devient votre meilleur choix. Windows et OS X prennent en charge Samba de manière totalement automatique, tout comme Linux, bien que son utilisation soit parfois rude.

64
jcrawfordor

Mon favori personnel dans les cas où la sécurité importe peu est netcat + tar :

Pour envoyer un répertoire, cd dans le répertoire dont vous voulez envoyer le contenu sur l'ordinateur et envoyez-le:

tar -cz . | nc -q 10 -l -p 45454

Sur l'ordinateur recevant le contenu, sélectionnez l'emplacement où vous souhaitez que le contenu apparaisse et procédez comme suit:

nc -w 10 $REMOTE_Host 45454 | tar -xz

Remplacez $REMOTE_Host par ip/nom d'hôte de l'ordinateur effectuant l'envoi. Vous pouvez également utiliser un autre port au lieu de 45454.

Ce qui se passe ici, c’est que l’ordinateur «récepteur» se connecte à l’ordinateur émetteur sur le port 45454 et reçoit le contenu tar du répertoire rep. le répertoire en cours.

Exemple rapide (utilisation de localhost en tant qu'hôte distant)

Ordinateur 1

caspar@jumpy:~/nctest/a/mydir$ ls
file_a.txt  file_b.log
caspar@jumpy:~/nctest/a/mydir$ tar -cz . | nc -q 10 -l -p 45454

Ordinateur 2

caspar@jumpy:~/nctest/b$ ls
caspar@jumpy:~/nctest/b$ nc -w 10 localhost 45454 | tar -xz
caspar@jumpy:~/nctest/b$ ls
file_a.txt  file_b.log
56
Caspar

Scp est recommandé pour les déplacements uniques.

Mais si vous trouvez que ce répertoire peut fonctionner et que vous devez le déplacer plusieurs fois pour que l'autre position soit mise à jour, vous pouvez utiliser rsync (avec ssh).

Comme rsync a beaucoup d’arguments, j’ai l'habitude de le mettre dans un petit shell, donc je comprends bien (à chaque fois). L'idée est d'envoyer uniquement les choses qui ont changé depuis sa dernière exécution.

#!/bin/bash

user="nisse"
Host="192.168.0.33"

echo "Sync: /home/media/music/"
rsync --archive --delete -v --progress -e "ssh -l $user " /home/media/music/ $Host:/home/media/music/

Ceci déplacera un répertoire appelé "/ home/media/music /" de l'ordinateur local vers l'ordinateur appelé 192.168.0.33, à l'aide de l'utilisateur "nisse". Et supprimez tout élément sur la cible qui n’existe pas sur le PC local.

19
Johan

Je vous recommanderais d’essayer des alternatives au lieu d’utiliser directement SSH pour déplacer des fichiers à l’intérieur de votre propre réseau local (LAN), car les frais généraux sont immenses. J'irais avec la solution de Caspar si celle-ci pour une raison quelconque ne fonctionnait pas pour vous:

A la source:

$ python3 -m http.server {PICK_YOUR_PORT}

Sur la destination:

$ wget -r {ip / hostname}:{port}/{File / Directory}

Cela ne sera pas seulement plus léger que l’utilisation de SSH, mais bien plus rapide avec des vitesses allant de 45 à 65 Mo sur un convertisseur UTP CAT6 standard.
Si vous voulez vraiment tirer le meilleur parti de la connexion, essayez de remplacer wget par lftp et d’utiliser les commandes pget -n20 et mirror -r.

7
cig0

Le plus rapide est probablement netcat (comme décrit par caspar).

J'aime la combinaison de tar & ssh, qui est sécurisée et toujours rapide:

Sur la source

tar -cf - . | ( ssh user@target && cd /target/path && tar -xf - )

En faisant cela en tant que root, il préserve les autorisations de fichiers. Ou utilisez -p des deux côtés. De plus, -S peut être considéré si vous avez des fichiers fragmentés.

Il est possible de réduire la surcharge de chiffrement de ssh si vous utilisez arcfour comme chiffre qui fonctionne avec openSSH

tar -cpSf - . | ( ssh -c arcfour user@targethost && cd /target/path && tar -xpSf - )

Pour mettre à jour le chemin distant, rsync est parfait:

rsync -av --sparse --delete -e "ssh -c arcfour" . root@targethost:/target/path
7
Tim Haegele

Si cela doit absolument être fait sur le réseau local, j'utiliserais rsync, car cela reprendrait à l'endroit où il s'était arrêté s'il était interrompu. Il propose également quelques autres astuces pour réduire au minimum la quantité de données transférées, bien que je doute que beaucoup d’entre elles soient pertinentes pour la copie d’une bibliothèque musicale dans un lieu vierge. Si la sécurité vous préoccupe, définissez simplement RSYNC_RSH=ssh en premier et les données seront transmises via ssh.

Cependant, si je le faisais, je n’utiliserais probablement pas le réseau local. Je copierais les fichiers sur un disque dur USB puis sur un disque dur. D'après mon expérience, cela peut facilement être plusieurs ordres de grandeur plus rapide que de passer par le réseau local, même si vous devez copier les fichiers deux fois - USB 2.0 est évalué à 480 Mbps, ce qui est plus rapide que tout ce qui est à court d'Ethernet gigabit et qu'il est moins sensible aux conditions. ce qui dégradera les performances d'un réseau local. Il est également totalement indépendant du système d'exploitation, à condition que vous utilisiez un système de fichiers que toutes les machines impliquées peuvent gérer. Je recommande VFAT/FAT32, car il s'agit d'un système assez universel.

4
Dave Sherohman

Je suggérerais rsync car il copiera les fichiers progressivement. Vous pouvez le configurer pour copier uniquement les fichiers modifiés ou nouveaux une fois que vous avez effectué la mise à jour initiale. Vous pouvez utiliser ssh comme couche de transport si vous le souhaitez.

2
Sardathrion

J'utilise Unison , qui est un synchroniseur de fichiers génial sur de nombreux protocoles différents. Vous pouvez le configurer pour utiliser scpname__, rcpname__, ftpou même localement sur le système de fichiers entre deux dossiers. Je l'utilise pour synchroniser ma bibliothèque musicale, car il peut transférer plusieurs fichiers à la fois sur le réseau et est vraiment paramétrable dans sa configuration. Je garde ma collection de musique sauvegardée et synchronisée sur 2 ou 3 ordinateurs. Il ne copie que les fichiers modifiés, en conservant un index aux deux extrémités du transfert afin de pouvoir savoir quand un client a modifié le fichier ou quand le fichier du serveur a été modifié.

Votre kilométrage peut varier, mais c’est certainement bien mieux que scpdans l’ensemble de votre collection de musique chaque fois que vous ajoutez une nouvelle chanson :)

1
Naftuli Kay

J'ai d'abord suivi le processus ssh pour la connexion sans mot de passe/ http://www.tecmint.com/ssh-passwordless-login-using-ssh-kehen-in-5-easy-steps/

Pour les scripts et les fichiers texte, les opérations suivantes me conviennent parfaitement

Pour transférer des données d'un hôte local à un hôte distant. cat localfile | ssh <user>@<ip> "cat > <path>/<remotefile>"

Pour transférer des données d'un hôte distant à un hôte local. ssh <user>@<ip> "cat > <path>/<remotefile>" | cat > localfile

Cela me permet de transférer des fichiers sur des systèmes embarqués sur lesquels le client ssh ou scp n'est pas intégré.

Pas de SCP - seulement SSH.

0
enthusiasticgeek