95 votes

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

Je veux transférer des fichiers (un dossier de musique) entre deux ordinateurs Linux. Après avoir cherché la meilleure façon de le faire, j'ai vu qu'il y a lots de moyens de le faire. Je sais que cette question a été posée beaucoup , partout y tout le temps . Le principal problème est qu'il n'existe pas de consensus clair et récent sur la meilleure façon de réaliser 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 Stack Exchange, je veux que ceci ne soit pas lié à ma situation particulière, mais plus un guide pour les autres aussi 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 ? Le plus flexible ? La plus simple ? La meilleure solution ? Quels sont les avantages et les inconvénients de chacune ? Existe-t-il d'autres (meilleures) options ? Quels sont les paramètres à prendre en compte pour choisir la meilleure méthode (la solution peut dépendre du nombre de fichiers, de la taille des fichiers, de la facilité par rapport à la flexibilité, ...) ?

80voto

jcrawfordor Points 15851

Dans un environnement Linux, tant pour la sécurité que pour la facilité d'utilisation, ssh est la meilleure solution. SSH, SSHFS, SCP et SFTP sont tous des services différents construits sur le protocole SSH. SCP est très facile à utiliser, il fonctionne comme CP mais vous pouvez fournir des noms d'utilisateurs et de machines dans le chemin. Ainsi, 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é hôte. C'est tout - nous n'avons pas besoin de configurer quoi que ce soit. Le mot de passe du compte de l'autre machine vous sera demandé si vous n'avez pas mis en place un certificat ou une autre forme d'authentification (scp partage ces paramètres avec ssh, bien sûr).

SFTP est un outil qui facilite l'exécution d'un grand nombre d'opérations sur un système de fichiers distant. Il fonctionne comme FTP, mais il s'exécute via SSH, ce qui le rend sécurisé et ne nécessite qu'un serveur SSH. man sftp vous dira tout sur la façon de l'utiliser. Je n'utilise pas SFTP juste pour déplacer un dossier entre deux machines, c'est plus utile lorsque vous avez beaucoup d'opérations à faire, comme si vous réorganisez des fichiers sur un autre ordinateur.

SSHFS ne fait qu'étendre SFTP à un système de fichiers : il vous permet de monter un hôte virtuel dans votre système de fichiers, de sorte que les opérations réseau se déroulent de manière totalement transparente. SSHFS est destiné à des configurations semi-permanentes, et pas seulement à un transfert de fichiers unique. Sa mise en place demande un peu plus d'efforts, que vous pouvez lire sur le site suivant le site web du projet .

Si vous devez travailler dans un environnement à système d'exploitation mixte, Samba est votre meilleur choix. Windows et OS X prennent en charge Samba de manière totalement automatique, et Linux le fait également, bien que son utilisation soit parfois difficile.

21voto

Candidasa Points 1560

Pour les déplacements ponctuels, scp est recommandé.

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

Comme rsync a beaucoup d'arguments, je le place généralement dans un petit Shell pour que je le fasse correctement (à chaque fois). L'idée est d'envoyer seulement les choses qui ont changé depuis la dernière fois qu'il a été exécuté.

#!/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/

Cela va déplacer un répertoire appelé "/home/media/music/" de l'ordinateur local vers l'ordinateur appelé 192.168.0.33, en utilisant l'utilisateur "nisse". Et supprimer tout ce qui n'existe pas sur l'ordinateur local.

18voto

solr Points 491

Je vous recommande d'essayer d'autres solutions plutôt que d'utiliser directement SSH pour déplacer des fichiers à l'intérieur de votre propre réseau local, car les frais généraux sont IMMENSE. Je choisirais la solution de Caspar si celle-ci, pour une raison ou une autre, ne vous convient pas :

A la source :

$ python3 -m http.server {PICK_YOUR_PORT}

A destination :

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

Ce sera non seulement plus léger que l'utilisation de SSH mais aussi beaucoup plus rapide avec des vitesses allant de 45~65MiB sur du CAT6 UTP standard.
Si vous voulez vraiment tirer le meilleur parti de la connexion, essayez de remplacer les éléments suivants wget con lftp et en utilisant pget -n20 y mirror -r des commandes.

11voto

Tim Haegele Points 277

Le plus rapide est probablement netcat (comme l'a décrit Caspar).

J'aime la combinaison de tar & ssh qui est sûr et toujours rapide :

Sur la source

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

En faisant cela en tant que root, cela préserve les permissions des fichiers. Ou utilisez -p des deux côtés. Voir aussi -S peut être envisagée si vous avez des fichiers épars.

Il est possible de réduire l'encombrement du chiffrage de ssh si vous utilisez arcfour comme chiffrement qui fonctionne avec openSSH :

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

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

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

7voto

Dave Sherohman Points 5293

Si cela doit absolument être fait sur le réseau local, j'utiliserais rsync car il reprendra là où il s'est arrêté s'il est interrompu. Il a également quelques autres astuces pour minimiser la quantité de données transférées, bien que je doute que beaucoup/toutes ces astuces soient pertinentes dans le cas de la copie d'une bibliothèque musicale vers un emplacement vierge. Si la sécurité est une préoccupation, il suffit de définir RSYNC_RSH=ssh d'abord et les données seront tunnelisées par ssh.

Mais si je le faisais vraiment, je n'utiliserais probablement pas du tout le réseau local. Je copierais les fichiers sur un disque dur USB, puis à partir de celui-ci. 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 s'il faut copier les fichiers deux fois - l'USB 2.0 est conçu pour 480 Mbps, ce qui est plus rapide que tout ce qui n'est pas de l'Ethernet gigabit, et il est moins sensible aux conditions qui dégradent les performances d'un réseau local. Il est également totalement indépendant du système d'exploitation, à condition d'utiliser un système de fichiers que toutes les machines concernées peuvent gérer - je recommanderais VFAT/FAT32, car il est pratiquement universel.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X