Question 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 beaucoup des 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’ya pas de consensus récent et clair sur la meilleure façon de réaliser cette tâche en 2011 pour les débutants Linux (même en fonction de certains paramètres).

Donc, dans l'esprit des sites Web Stack Exchange, je veux que cela ne soit pas lié à ma situation particulière, mais plutôt à un guide pour les autres et à 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? Le plus simple Meilleure solution? Quels sont les avantages et les inconvénients de chacun? Y a-t-il d'autres options (meilleures)? Quels sont les paramètres dans le choix de la meilleure méthode (la solution peut dépendre du nombre de fichiers, de la taille des fichiers, de la facilité ou de la flexibilité, etc.)?


68
2017-08-22 04:12


origine


Quelqu'un pourrait-il expliquer où rsync vient jouer dans tout cela? - Konerak
jonallard, s'il vous plaît ne pas ajouter le réponses au question (cela n'a pas vraiment de sens de faire cela, n'est-ce pas?) - Si vous estimez que certaines réponses nécessitent des informations supplémentaires, vous pouvez leur proposer des modifications ou créer votre propre réponse qui résume tout! - slhck


Réponses:


Dans un environnement Linux, pour la sécurité et la facilité d'utilisation, ssh est la meilleure solution. SSH, SSHFS, SCP et SFTP en tant que liste ne sont que des services différents construits sur le protocole SSH. SCP est très facile à utiliser, il fonctionne comme le CP, mais vous pouvez fournir des noms d'utilisateur et de machine dans le chemin. Donc, on pourrait 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 ça - nous n'avons pas besoin de mettre quoi que ce soit. Vous serez invité à entrer le mot de passe du compte sur l'autre machine si vous n'avez pas de certificat ou une autre configuration d'authentification (bien sûr, scp partage ces paramètres avec ssh).

SFTP est un outil qui facilite l'exécution de nombreuses opérations sur un système de fichiers distant. Il fonctionne comme FTP, mais il s'exécute via SSH, il est donc sécurisé et ne nécessite qu'un serveur SSH. man sftp vous dira comment 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 sur votre système de fichiers, de sorte que les éléments du réseau se produisent de manière totalement transparente. SSHFS est pour les configurations semi-permanentes, pas seulement un transfert de fichier unique. Il faut un peu plus d'efforts pour se mettre en place, sur lequel vous pouvez lire le site du projet.

Si vous devez travailler dans un environnement de système d'exploitation mixte, Samba devient votre prochain meilleur pari. Windows et OS X prennent automatiquement en charge Samba et Linux le fait également, même s'il est parfois difficile à utiliser.


57
2017-08-22 04:35



Exactement le genre de réponse que je souhaitais: complète, exhaustive, détaillée, allant droit au but. - jonallard
Une chose cependant, pour scp pour travailler, avons-nous besoin de mettre en place une sorte de serveur ssh, d'écouteur ou de débloquer quelque chose de l'autre côté? Je reçois des erreurs "Connexion refusée". - jonallard
scp utilise ssh, donc cela fonctionnera si SSH fonctionne. Cela signifie bien sûr que vous devez avoir un serveur SSH en cours d'exécution (par défaut dans chaque distribution Linux dont je suis au courant) et qu'une connexion doit être possible (les pare-feu, NAT, etc. doivent avoir les exceptions appropriées). - jcrawfordor
Apparemment openssh-server doit être installé dans Ubuntu Natty. - jonallard
Notez que ssh utilise le cryptage, ce qui entraînera des frais supplémentaires. Si les ordinateurs impliqués ont des processeurs assez lents, cela pourrait faire la différence. Dans ce cas netcat ou similaire (voir la réponse de Caspar) pourrait être préférable. Bien sûr que si vous n'avez pas besoin de chiffrement (dans un réseau local protégé). - sleske


Mon favori personnel pour les cas où la sécurité n'a pas d'importance est netcat + le goudron:

Pour envoyer un répertoire, cd à l'intérieur du répertoire dont vous souhaitez envoyer le contenu sur l'ordinateur effectuant l'envoi et faire:

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

Sur l'ordinateur recevant le contenu, cd vers l'endroit où vous souhaitez que le contenu apparaisse et le fasse:

nc -w 10 $REMOTE_HOST 45454 | tar -xz

Remplacer $REMOTE_HOST avec ip / hostname de l'ordinateur effectuant l'envoi. Vous pouvez également utiliser un port différent au lieu de 45454.

Ce qui se passe en réalité ici, c’est que l’ordinateur récepteur se connecte à l’ordinateur émetteur sur le port 45454 et reçoive le contenu tar'd et gzip du répertoire, et le transmet directement à tar (et à gzip) pour l’extraire. le répertoire actuel.

Exemple rapide (en utilisant 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

53
2017-08-22 04:53



Cela me rappelle un peu sendnet et recnet des services ipx de Novel des temps anciens ... - sum1stolemyname
## netcat + bzip2 peut être un peu plus rapide sur les connexions lentes ## Envoi du serveur # cat file.txt | bzip2 -c | nc -l 1234 ## Serveur récepteur # nc $ posting_ip 1234 | bzip2 -cd> fichier.txt - shantanuo
@Caspar: Que diriez-vous d’éditer cette réponse pour suggérer une compression bzip2 ou lzma? - einpoklum
la -q L'option indique que vous utilisez openbsd-netcat, tandis que gnu-netcat est également assez courant (par défaut dans Arch Linux). Pourriez-vous étendre votre réponse pour inclure la syntaxe de gnu-netcat? - Sebastian
Le nc man actuel dit à propos de l'option -l: "C'est une erreur d'utiliser cette option avec les options -p, -s ou -z", mais étrangement, elle ne génère pas d'erreur. Je pense que l'utilisation de 'n-45454' devrait aussi bien fonctionner. - Claudiu


Pour une fois, scp est recommandé.

Mais si vous trouvez que ce répertoire 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, donc je le fais bien (à chaque fois). L'idée est de n'envoyer que des choses qui ont changé depuis la 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/

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 supprimez tout ce qui n’existe pas sur le PC local.


17
2017-08-22 06:49



+ pour rsync, qui semble un peu plus rapide et est très bien si vous devez synchroniser le répertoire plus tard - Wiesław Herr
Cela semble très prometteur (et facilement réutilisable) mais j'ai des répertoires et des fichiers avec des espaces et je reçois Erreur rsync: erreur de syntaxe ou d'utilisation (code 1) sur main.c (1348) [expéditeur = 3.1.1] -- Aucune suggestion? - Torben Gundtofte-Bruun


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

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

À la source

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

En faisant cela en tant que root, il conserve les autorisations de fichiers. Ou utiliser -p sur les deux côtés. Aussi -S peut être considéré si vous avez des fichiers clairsemés.

Il est possible de réduire la surcharge de chiffrement de ssh si tu utilises arcfour comme chiffrement qui fonctionne avec openSSH:

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

Pour mettre à jour le chemin d'accès distant, rsync est parfait:

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

6
2017-08-22 08:57



FWIW, j'ai récemment effectué un test de transfert entre deux ordinateurs portables modernes directement connectés utilisant rsync à la fois avec l'option arcfour et sans argument spécifique -e. Je n'ai remarqué aucune différence de vitesse. - Randy Syring


Je vous recommande d'essayer des alternatives plutôt que d'aller directement avec SSH pour déplacer des fichiers dans votre propre réseau local, car la surcharge est IMMENSE. Je voudrais aller avec la solution de Caspar si celle-ci pour une raison quelconque ne fonctionnera pas pour vous:

À la source:

$ python3 -m http.server {PICK_YOUR_PORT}

Sur destination:

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

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


4
2018-04-27 06:30





Si cela doit absolument être fait sur le LAN, j'utiliserai rsync, car elle reprendra là où elle s'est arrêtée si elle est interrompue. Il a également quelques autres astuces pour minimiser la quantité de données qui sont 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 sur un site vierge. Si la sécurité est une préoccupation, il suffit de définir RSYNC_RSH=ssh Tout d'abord, les données seront transférées via ssh.

Si je le faisais, je n’utiliserais probablement pas le réseau local. Je copierais les fichiers sur, puis hors d'un disque dur USB. D'après mon expérience, cela peut facilement être plus rapide que de passer par le réseau local, bien qu'il soit nécessaire de copier les fichiers deux fois - l'USB 2.0 est évalué à 480 Mbps, ce qui est plus rapide que le gigabit ethernet. ce qui va dégrader les performances d'un LAN. Il est également complètement indépendant du système d'exploitation, à condition que vous utilisiez un système de fichiers compatible avec toutes les machines impliquées - je vous recommande VFAT / FAT32, puisque c'est pratiquement universel.


3
2017-08-22 10:00



Je suis également fan du (pseudo) sneakernet, mais il est intéressant de noter que même si USB 2 est censé pouvoir obtenir 480 Mbps, je n'ai jamais vu que 30 Mo / s (environ 240 Mbps). J'ai peut-être juste un matériel USB bon marché <-> SATA;) De plus, FAT32 est quasiment universel, mais il est impossible de copier des éléments tels que des images DVD en raison de la contrainte de taille de fichier de 4 Go; cela vaut la peine de faire remarquer que les gens ne sont pas trop frustrés par le message d'erreur "d'espace insuffisant" que Windows (au moins) donne. - Caspar
@Caspar: bonnes mises en garde! Merci de les mentionner; J'oublie toujours la limite de taille du fichier FAT32 ... - Dave Sherohman


Je suggère rsync car il va copier des fichiers de manière incrémentale. Vous pouvez le configurer pour ne copier que les fichiers modifiés ou nouveaux uniquement une fois que vous avez effectué la mise à jour initiale. Vous pouvez utiliser ssh comme couche de transport si vous le souhaitez.


2
2017-08-22 09:03





j'utilise Unisson, qui est un synchroniseur de fichiers génial sur de nombreux protocoles différents. Vous pouvez le configurer pour l'utiliser scp, rcp, ftp ou même localement sur le système de fichiers entre deux dossiers. Je l'utilise pour synchroniser ma bibliothèque musicale, car elle peut transférer plusieurs fichiers à la fois sur le réseau et sa configuration est vraiment ajustable. Je garde ma collection de musique sauvegardée et synchronisée sur 2-3 ordinateurs. Il ne copiera que les fichiers modifiés et le fera en conservant un index aux deux extrémités du transfert afin de pouvoir déterminer quand un client a modifié le fichier ou si le fichier du serveur a été modifié.

Votre kilométrage peut varier, mais c'est certainement beaucoup mieux que scptoute votre collection de musique chaque fois que vous ajoutez une nouvelle chanson :)


1
2017-11-25 23:14





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

Pour les scripts et les fichiers texte, les travaux suivants me conviennent parfaitement

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

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

Cela fonctionne pour moi 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.


0
2018-04-14 20:18