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

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. Nachdem ich nach dem besten Weg dafür gesucht habe, habe ich gesehen, dass esvieleMöglichkeiten, dies zu tun. Ich weiß, dass dies gefragt wurdeeine Menge,überallUnddie ganze Zeit. Das Hauptproblem dabei ist, dass es keinen klaren, aktuellen Konsens darüber gibt, wie diese Aufgabe im Jahr 2011 für Linux-Anfänger am besten zu erledigen ist (selbst abhängig von einigen Parametern).

Ganz im Sinne der Stack Exchange-Websites soll dies nicht auf meine spezielle Situation bezogen sein, sondern eher auch als Anleitung für andere dienen, wie man Dateien zwischen zwei Linux-Computern über ein lokales Netzwerk überträgt. 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 die einfachste? Die flexibelste? Die simpelste? Die beste Lösung? Was sind die Vor- und Nachteile der einzelnen Methoden? Gibt es andere (bessere) Optionen? Was sind die Parameter bei der Auswahl der besten Methode (die Lösung kann von der Anzahl der Dateien, der Dateigröße, der Einfachheit vs. Flexibilität usw. abhängen)?

Antwort1

In einer Linux-Umgebung ist SSH aus Sicherheitsgründen und wegen der Benutzerfreundlichkeit die beste Lösung. SSH, SSHFS, SCP und SFTP, wie Sie auflisten, sind allesamt nur verschiedene Dienste, die auf dem SSH-Protokoll aufbauen. SCP ist sehr einfach zu verwenden, es funktioniert genau wie CP, aber Sie können im Pfad Benutzer- und Computernamen angeben. Wir könnten also ein CP wie verwenden cp ~/music/ ~/newmusic/, aber wir könnten es genauso gut scp ~/music/ user@host:~/newmusican den Computer mit dem Namen Host senden. Das ist alles – wir müssen nichts einrichten. Sie werden auf dem anderen Computer nach dem Kontokennwort gefragt, wenn Sie kein Zertifikat oder eine andere Authentifizierung eingerichtet haben (Scp teilt diese Einstellungen natürlich mit SSH).

SFTP ist ein Tool, mit dem sich viele Vorgänge auf einem Remote-Dateisystem ganz einfach durchführen lassen. Es funktioniert genau wie FTP, läuft aber über SSH, ist also sicher und erfordert nur einen SSH-Server. Ich man sftpwerde Ihnen alles über die Verwendung erklären. Ich verwende SFTP nicht nur, um einen Ordner zwischen zwei Rechnern zu verschieben. 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 einfach zu einem Dateisystem: Es ermöglicht Ihnen, einen virtuellen Host in Ihr Dateisystem einzubinden, sodass die Netzwerkfunktionen völlig transparent ablaufen. SSHFS ist für semipermanente Setups gedacht, nicht nur für eine einmalige Dateiübertragung. Die Einrichtung erfordert etwas mehr Aufwand, worüber Sie mehr lesen können aufzur Projektwebsite.

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

Antwort2

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

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

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

Wechseln Sie auf dem Computer, der die Inhalte empfängt, mit cd an die Stelle, an der die Inhalte angezeigt werden sollen, und führen Sie Folgendes aus:

nc -w 10 $REMOTE_HOST 45454 | tar -xz

Ersetzen Sie $REMOTE_HOSTdurch die IP-Adresse/den Hostnamen des sendenden Computers. Sie können anstelle von auch einen anderen Port verwenden 45454.

Was hier tatsächlich passiert, ist, dass der „empfangende“ Computer eine Verbindung mit dem sendenden Computer über Port 45454 herstellt und den getarnten und gzippten Inhalt des Verzeichnisses empfängt und diesen direkt an tar (und gzip) weitergibt, um ihn in das aktuelle Verzeichnis zu extrahieren.

Kurzes Beispiel(mithilfe von localhost als Remote-Host)

Computer 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

Computer 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

Antwort3

Für einmalige Verschiebungen 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, lege ich es normalerweise in eine kleine Shell, damit es (jedes Mal) richtig läuft. Die Idee ist, nur Dinge zu senden, die sich seit dem letzten Ausführen 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/

Dadurch wird ein Verzeichnis mit dem Namen „/home/media/music/“ vom lokalen Computer auf den PC mit dem Namen 192.168.0.33 verschoben, wobei der Benutzer „nisse“ verwendet wird. Außerdem wird auf dem Ziel alles gelöscht, was auf dem lokalen PC nicht vorhanden ist.

Antwort4

Am schnellsten geht das wohl netcat(wie Caspar beschrieben hat).

Mir gefällt die Kombination aus tar& ssh, die sicher und trotzdem schnell ist:

Zur Quelle

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

Wenn Sie dies als Root tun, bleiben die Dateiberechtigungen erhalten. Oder verwenden Sie es -pauf beiden Seiten. Dies -Skann auch in Betracht gezogen werden, wenn Sie über spärliche Dateien verfügen.

Es ist möglich, den Verschlüsselungsaufwand zu reduzieren, sshwenn Sie eine Chiffre verwenden arcfour, die mit openSSH funktioniert:

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

Um den Remote-Pfad zu aktualisieren, rsyncist Folgendes optimal:

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

verwandte Informationen