2011-08-22 04:12:04 +0000 2011-08-22 04:12:04 +0000
81
81

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

Je veux transférer des fichiers (un dossier musical) entre deux ordinateurs Linux. Après avoir cherché la meilleure façon de le faire, 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 est qu'il n'y a pas de consensus clair et récent sur la meilleure façon d'accomplir 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 de Stack Exchange, je ne veux pas que cela soit lié à ma situation particulière, mais plutôt 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
  • giver

Quel est le plus facile ? Le plus souple ? Le plus simple ? La meilleure solution ? Quels sont les avantages et les inconvénients de chacune ? Y a-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é, …) ?

Réponses (7)

66
66
66
2011-08-22 04:35:30 +0000

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, comme vous le savez, ne sont que 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 d'accès. 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 vous sera demandé sur l'autre machine si vous n'avez pas de certificat ou d'autre moyen d'authentification (scp partage ces paramètres avec ssh, bien sûr).

SFTP est un outil qui permet d'effectuer facilement de nombreuses opérations sur un système de fichiers distant - il fonctionne comme FTP, mais il s'exécute par SSH, donc il est sécurisé et ne nécessite qu'un serveur SSH. man sftp vous expliquera comment l'utiliser. Je n'utilise pas SFTP juste pour déplacer un dossier entre deux machines, c'est plus utile quand vous avez beaucoup d'opérations à faire, comme si vous réorganisez des fichiers sur un autre ordinateur.

SSHFS étend simplement 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 choses se passent de manière totalement transparente sur le réseau. SSHFS est destiné aux installations semi-permanentes, et non pas seulement à un transfert de fichiers unique. Il faut un peu plus d'efforts pour le mettre en place, ce que vous pouvez lire sur le site web du projet le site web du projet .

Si vous avez besoin de travailler dans un environnement mixte, Samba est votre meilleur choix. Windows et OS X prennent en charge Samba de manière entièrement automatique, tout comme Linux, bien que son utilisation soit parfois difficile.

19
19
19
2011-08-22 06:49:45 +0000

Pour les coups uniques, le scp est recommandé.

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

Comme rsync a beaucoup d'arguments, je le mets généralement dans un petit shell pour qu'il fonctionne correctement (à chaque fois). L'idée est de n'envoyer que les choses qui ont changé depuis la dernière fois qu'il a fonctionné.

#!/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 le PC appelé 192.168.0.33, en utilisant l'utilisateur “nisse”. Et supprimer tout ce qui n'existe pas sur l'ordinateur local.

10
10
10
2014-04-27 06:30:49 +0000

Je vous recommande d'essayer des alternatives plutôt que d'utiliser directement les sciences humaines pour déplacer les fichiers dans votre propre réseau local, car la surcharge est IMMENSE. Je choisirais la solution de Caspar si, pour une raison quelconque, celle-ci ne vous convient pas :

A la source :

$ python3 -m http.server {PICK_YOUR_PORT}

A la 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 un 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.

8
8
8
2011-08-22 08:57:03 +0000

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

J'aime la combinaison de tar & ssh, qui est sûre 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 permissions des fichiers. Ou utilisez -p des deux côtés. On peut aussi envisager -S si vous avez des fichiers peu nombreux.

Il est possible de réduire la surcharge de chiffrement 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 distant, rsync est parfait :

rsync -av --sparse --delete -e "ssh -c arcfour" . root@targethost:/target/path
5
5
5
2011-08-22 10:00:32 +0000

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 y a aussi quelques autres astuces pour minimiser la quantité de données transférées, bien que je doute que beaucoup d'entre elles soient pertinentes dans le cas de la copie d'une bibliothèque musicale dans un endroit vierge. Si la sécurité est une préoccupation, il suffit de régler RSYNC_RSH=ssh d'abord et les données seront transmises 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 je les enlèverais. D'après mon expérience, cela peut facilement être plus rapide de plusieurs ordres de grandeur que de passer par le réseau local, même s'il faut copier les fichiers deux fois - l'USB 2.0 a une vitesse de 480 Mbps, ce qui est plus rapide que tout ce qui n'est pas du gigabit ethernet, en plus il est moins sensible aux conditions qui vont dégrader les performances d'un réseau local. Il est également complètement 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 c'est à peu près universel.

2
2
2
2011-08-22 09:03:18 +0000
0
0
0
2016-04-14 20:18:21 +0000

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

Pour les scripts et les fichiers texte, la procédure suivante me convient 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 convient pour transférer des fichiers sur des systèmes embarqués qui n'ont pas de client ssh ou scp intégré.

Pas de scp - seulement ssh.