it-swarm.com.de

Beste Möglichkeit zum Übertragen von Dateien über ein LAN zwischen zwei Linux-Computern

Ich möchte Dateien (einen Musikordner) zwischen zwei Linux-Computern übertragen. Nach der Suche nach dem besten Weg, dies zu tun, habe ich gesehen, dass es viele Möglichkeiten gibt, dies zu tun. Ich weiß, das wurde gefragt viel , überall und die ganze Zeit . Das Hauptproblem dabei ist, dass es in letzter Zeit keinen klaren Konsens darüber gibt, wie Linux-Anfänger diese Aufgabe 2011 am besten bewältigen können (auch in Abhängigkeit von einigen Parametern).

Im Geiste der Stack Exchange-Websites möchte ich, dass dies nicht mit meiner speziellen Situation zusammenhängt, sondern eher als Leitfaden für andere dient, um Dateien zwischen zwei Linux-Computern über ein lokales Netzwerk zu übertragen. Ich denke, ein Wiki wäre für viele nützlich.

Folgendes habe ich bisher gefunden:

  • ssh
  • sshfs
  • scp
  • sftp
  • nfs
  • samba
  • geber

Was ist am einfachsten? Am flexibelsten? Am einfachsten? Beste Lösung? Was sind die Vor- und Nachteile von jedem? Gibt es andere (bessere) Möglichkeiten? Was sind die Parameter bei der Auswahl der besten Methode (die Lösung kann von der Anzahl der Dateien, der Dateigröße, der Einfachheit oder der Flexibilität abhängen, ...)?

75
jonallard

In einer Linux-Umgebung ist ssh aus Sicherheitsgründen und aus Gründen der Benutzerfreundlichkeit der beste Weg. Wie Sie sehen, sind SSH, SSHFS, SCP und SFTP nur verschiedene Dienste, die auf dem SSH-Protokoll aufbauen. SCP ist sehr einfach zu bedienen und funktioniert genau wie CP. Sie können jedoch Benutzer- und Maschinennamen im Pfad angeben. Wir könnten also einen CP wie cp ~/music/ ~/newmusic/ ausführen, aber wir könnten genauso einfach scp ~/music/ [email protected]:~/newmusic ausführen, um ihn an den Computer mit dem Namen Host zu senden. Das war's - wir müssen nichts einrichten. Sie werden zur Eingabe des Kontokennworts auf dem anderen Computer aufgefordert, wenn Sie kein Zertifikat oder keine andere Authentifizierung eingerichtet haben (scp teilt diese Einstellungen natürlich mit ssh).

SFTP ist ein Tool, mit dem viele Vorgänge auf einem Remote-Dateisystem einfach ausgeführt werden können. Es funktioniert genau wie FTP, läuft jedoch über SSH, ist also sicher und erfordert nur einen SSH-Server. man sftp erklärt Ihnen alles über die Verwendung. Ich verwende SFTP nicht nur zum Verschieben eines Ordners zwischen zwei Computern. Es ist nützlicher, wenn Sie viele Vorgänge ausführen müssen, z. B. wenn Sie Dateien auf einem anderen Computer neu anordnen.

SSHFS erweitert SFTP lediglich in ein Dateisystem: Es ermöglicht Ihnen, einen virtuellen Host in Ihr Dateisystem einzubinden, sodass das Netzwerkmaterial völlig transparent ist. SSHFS ist für semi-permanente Setups gedacht, nicht nur für eine einmalige Dateiübertragung. Die Einrichtung ist etwas aufwendiger und kann auf der Projektwebsite nachgelesen werden.

Wenn Sie in einer Umgebung mit unterschiedlichen Betriebssystemen arbeiten müssen, ist Samba die nächstbeste Wahl. Windows und OS X unterstützen Samba vollständig automatisch und Linux auch, obwohl es manchmal schwierig zu bedienen ist.

64
jcrawfordor

Mein persönlicher Favorit für Fälle, in denen Sicherheit keine Rolle spielt, ist netcat + tar :

Um ein Verzeichnis zu senden, wechseln Sie in das Verzeichnis, dessen Inhalt Sie auf dem Computer senden möchten, und führen Sie folgende Schritte aus:

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

Wechseln Sie auf dem Computer, der den Inhalt empfängt, zu der Stelle, an der der Inhalt angezeigt werden soll, und führen Sie folgende Schritte aus:

nc -w 10 $REMOTE_Host 45454 | tar -xz

Ersetzen Sie $REMOTE_Host durch ip/hostname des Computers, der das Senden durchführt. Sie können anstelle von 45454 auch einen anderen Port verwenden.

Was hier tatsächlich passiert, ist, dass der 'empfangende' Computer eine Verbindung zum sendenden Computer an Port 45454 herstellt und den Inhalt des Verzeichnisses mit tar und gzip empfängt und diesen direkt an tar (und gzip) weiterleitet, um ihn zu extrahieren das aktuelle Verzeichnis.

Ein kurzes Beispiel (localhost als Remote-Host verwenden)

Computer 1

[email protected]:~/nctest/a/mydir$ ls
file_a.txt  file_b.log
[email protected]:~/nctest/a/mydir$ tar -cz . | nc -q 10 -l -p 45454

Computer 2

[email protected]:~/nctest/b$ ls
[email protected]:~/nctest/b$ nc -w 10 localhost 45454 | tar -xz
[email protected]:~/nctest/b$ ls
file_a.txt  file_b.log
56
Caspar

Für einmalige Bewegungen wird scp empfohlen.

Wenn Sie jedoch feststellen, dass dieses Verzeichnis möglicherweise funktioniert und Sie es mehrmals verschieben müssen, um die andere Position auf dem neuesten Stand zu halten, können Sie rsync (mit ssh) verwenden.

Da rsync viele Argumente hat, füge ich es normalerweise in eine kleine Shell ein, damit ich es (jedes Mal) richtig mache. Die Idee ist, nur Dinge zu senden, die sich seit der letzten Ausführung geändert haben.

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

Dies verschiebt ein Verzeichnis mit dem Namen "/ home/media/music /" vom lokalen Computer auf den PC mit dem Namen 192.168.0.33 unter Verwendung des Benutzers "nisse". Und löschen Sie alles auf dem Ziel, was auf dem lokalen PC nicht vorhanden ist.

19
Johan

Ich würde Ihnen empfehlen, Alternativen zu versuchen, stattdessen SSH zu verwenden, um Dateien in Ihrem eigenen LAN zu verschieben, da der Overhead IMMENS ist. Ich würde mich für Caspars Lösung entscheiden, wenn diese aus irgendeinem Grund bei Ihnen nicht funktioniert:

An der Quelle:

$ python3 -m http.server {PICK_YOUR_PORT}

Am Bestimmungsort:

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

Dies ist nicht nur leichter als die Verwendung von SSH, sondern auch viel schneller mit Geschwindigkeiten von 45 bis 65 MB bei Standard-CAT6-UTP.
Wenn Sie wirklich das meiste aus der Verbindung herausholen möchten, versuchen Sie, wget durch lftp zu ersetzen und die Befehle pget -n20 und mirror -r zu verwenden.

7
cig0

Das schnellste ist wahrscheinlich netcat (wie von caspar beschrieben).

Ich mag die Kombination von tar & ssh, die sicher und trotzdem schnell ist:

Auf der Quelle

tar -cf - . | ( ssh [email protected] && cd /target/path && tar -xf - )

Wenn Sie dies als root tun, bleiben die Dateiberechtigungen erhalten. Oder verwenden Sie -p auf beiden Seiten. -S kann auch in Betracht gezogen werden, wenn Sie über spärliche Dateien verfügen.

Es ist möglich, den Verschlüsselungsaufwand für ssh zu reduzieren, wenn Sie arcfour als Verschlüsselung verwenden, die mit openSSH funktioniert:

tar -cpSf - . | ( ssh -c arcfour [email protected] && cd /target/path && tar -xpSf - )

Um den Remote-Pfad zu aktualisieren, ist rsync perfekt:

rsync -av --sparse --delete -e "ssh -c arcfour" . [email protected]:/target/path
7
Tim Haegele

Wenn es unbedingt über das LAN erfolgen muss, würde ich rsync verwenden, da es dort weitermachen wird, wo es aufgehört hat, wenn es unterbrochen wird. Es gibt auch ein paar andere Tricks, um die zu übertragende Datenmenge zu minimieren, obwohl ich bezweifle, dass viele davon für den Fall relevant sind, dass eine Musikbibliothek an einen neuen Speicherort kopiert wird. Wenn Sicherheit ein Problem ist, setzen Sie einfach zuerst RSYNC_RSH=ssh und die Daten werden über ssh getunnelt.

Wenn ich es aber tatsächlich machen würde, würde ich das LAN wahrscheinlich überhaupt nicht nutzen. Ich würde die Dateien auf eine USB-Festplatte kopieren und dann wieder entfernen. Meiner Erfahrung nach kann dies trotz zweimaligem Kopieren der Dateien um mehrere Größenordnungen schneller sein als das LAN. USB 2.0 ist für 480 Mbit/s ausgelegt, was schneller ist als alles andere als Gigabit-Ethernet und außerdem weniger anfällig für Bedingungen Dies beeinträchtigt die Leistung eines LAN. Es ist auch völlig unabhängig vom Betriebssystem, vorausgesetzt, Sie verwenden ein Dateisystem, mit dem alle beteiligten Computer umgehen können - ich würde VFAT/FAT32 empfehlen, da dies so ziemlich universell ist.

4
Dave Sherohman

Ich würde rsync vorschlagen, da es Dateien inkrementell kopiert. Sie können festlegen, dass nur geänderte oder neue Dateien kopiert werden, nachdem Sie das erste Update durchgeführt haben. Wenn Sie möchten, können Sie ssh als Transportebene verwenden.

2
Sardathrion

Ich verwende Unison , ein großartiger Dateisynchronisierer für viele verschiedene Protokolle. Sie können es so konfigurieren, dass scp, rcp, ftp oder sogar lokal im Dateisystem zwischen zwei Ordnern verwendet wird. Ich verwende es, um meine Musikbibliothek zu synchronisieren, da es mehrere Dateien gleichzeitig über das Netzwerk übertragen kann und in seiner Konfiguration wirklich einstellbar ist. Ich halte meine Musiksammlung auf 2-3 Computern gesichert und synchron. Es werden nur geänderte Dateien kopiert. Hierzu wird an beiden Enden der Übertragung ein Index geführt, um feststellen zu können, wann ein Client die Datei geändert hat oder wann sich die Serverdatei geändert hat.

Ihre Laufleistung kann variieren, aber es ist sicherlich viel besser als scp jedes Mal, wenn Sie ein neues Lied hinzufügen, Ihre gesamte Musiksammlung zu benennen :)

1
Naftuli Kay

Ich habe zuerst den SSH-Prozess für die passwortlose Anmeldung befolgt http://www.tecmint.com/ssh-passwordless-login-using-ssh-keygen-in-5-easy-steps/

Für Skripte und Textdateien funktioniert das Folgende für mich einwandfrei

Übertragen von Daten vom lokalen Host zum Remote-Host. cat localfile | ssh <user>@<ip> "cat > <path>/<remotefile>"

So übertragen Sie Daten vom Remote-Host zum lokalen Host. ssh <user>@<ip> "cat > <path>/<remotefile>" | cat > localfile

Dies funktioniert für mich, um Dateien auf eingebetteten Systemen zu übertragen, auf denen kein ssh-Client oder scp integriert ist.

Kein scp - nur ssh.

0