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

Beste Methode zur Übertragung 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ß, dass diese Frage schon viel, überall und immer gestellt wurde. Das Hauptproblem dabei ist, dass es keinen klaren, aktuellen Konsens über einen besten Weg gibt, diese Aufgabe im Jahr 2011 für Linux-Anfänger zu erledigen (sogar in Abhängigkeit von einigen Parametern).

Im Geiste der Stack Exchange-Webseiten möchte ich dies also nicht auf meine spezielle Situation beziehen, sondern eher eine Anleitung für andere sein, wie man Dateien zwischen zwei Linux-Computern über ein lokales Netzwerk überträgt. Ich denke, dass ein Wiki für viele nützlich sein würde.

Hier ist, was ich bis jetzt gefunden habe:

  • ssh
  • sshfs
  • scp
  • sftp
  • nfs
  • samba
  • giver

Was ist am einfachsten? Am flexibelsten? Am einfachsten? Die beste Lösung? Was sind die Vor- und Nachteile von jedem? Gibt es andere (bessere) Optionen? Was sind die Parameter bei der Auswahl der besten Methode (die Lösung könnte von der Anzahl der Dateien, der Dateigröße, der Einfachheit vs. Flexibilität, … abhängen)?

Antworten (7)

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

In einer Linux-Umgebung ist ssh sowohl für die Sicherheit als auch für die Benutzerfreundlichkeit der beste Weg. SSH, SSHFS, SCP und SFTP, wie Sie sie aufzählen, sind alle nur verschiedene Dienste, die auf dem SSH-Protokoll aufbauen. SCP ist sehr einfach zu benutzen, es funktioniert genau wie CP, aber Sie können Benutzer- und Rechnernamen im Pfad angeben. Wir könnten also einen CP wie cp ~/music/ ~/newmusic/ machen, aber wir könnten genauso gut scp ~/music/ user@host:~/newmusic machen, um ihn an den Computer namens host zu schicken. Das war’s - wir brauchen nichts weiter einzurichten. Sie werden nach dem Passwort des Kontos auf dem anderen Rechner gefragt, wenn Sie kein Zertifikat oder eine andere Authentifizierung eingerichtet haben (scp teilt diese Einstellungen natürlich mit ssh).

SFTP ist ein Werkzeug, das es einfach macht, viele Operationen auf einem entfernten Dateisystem auszuführen - es funktioniert wie FTP, läuft aber über SSH, ist also sicher und benötigt nur einen SSH-Server. man sftp erklärt Ihnen, wie man es benutzt. Ich verwende SFTP nicht nur, um einen Ordner zwischen zwei Rechnern zu verschieben, es ist nützlicher, wenn Sie viele Operationen zu erledigen haben, z. B. wenn Sie Dateien auf einem anderen Computer neu anordnen.

SSHFS erweitert SFTP einfach zu einem Dateisystem: Es erlaubt Ihnen, einen virtuellen Host in Ihr Dateisystem einzuhängen, so dass der Netzwerkkram völlig transparent geschieht. SSHFS ist für semi-permanente Setups gedacht, nicht nur für einen einmaligen Dateitransfer. Es erfordert etwas mehr Aufwand, um es einzurichten, worüber Sie auf der Projekt-Website lesen können.

Wenn Sie in einer Mixed-OS-Umgebung arbeiten müssen, ist Samba die nächstbeste Wahl. Windows und OS X unterstützen Samba ganz automatisch, und Linux tut es auch, obwohl es manchmal schwer zu bedienen ist.

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

Für einmalige Verschiebungen wird scp empfohlen.

Aber wenn Sie feststellen, dass dieses Verzeichnis vielleicht funktioniert und Sie es viele Male verschieben müssen, um die andere Position aktuell zu halten, dann können Sie rsync (mit ssh) verwenden.

Da rsync eine Menge Argumente hat, setze ich es normalerweise in eine kleine Shell, 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 namens “/home/media/music/” vom lokalen Computer auf den PC namens 192.168.0.33, mit dem Benutzer “nisse”. Dabei wird alles auf dem Ziel gelöscht, was auf dem lokalen PC nicht vorhanden ist.

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

Ich würde Ihnen empfehlen, Alternativen auszuprobieren, anstatt direkt mit SSH zu arbeiten, um Dateien innerhalb Ihres eigenen LANs zu verschieben, da der Overhead IMMENSE ist. Ich würde die Lösung von Caspar verwenden, wenn diese aus irgendeinem Grund nicht funktioniert:

An der Quelle:

$ python3 -m http.server {PICK_YOUR_PORT}

Am Ziel:

$ 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~65MiB auf Standard CAT6 UTP.
Wenn Sie wirklich das Maximum aus der Verbindung herausholen wollen, versuchen Sie, wget durch lftp zu ersetzen und die Befehle pget -n20 und mirror -r zu verwenden.

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

Am schnellsten 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 user@target && cd /target/path && tar -xf - )

Das als root zu tun, erhält die Dateirechte. Oder verwenden Sie -p auf beiden Seiten. Auch -S könnte in Betracht gezogen werden, wenn Sie spärliche Dateien haben.

Es ist möglich, den Verschlüsselungs-Overhead von ssh zu reduzieren, wenn Sie arcfour als Verschlüsselung verwenden, die mit openSSH funktioniert:

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

Um den entfernten Pfad zu aktualisieren, ist rsync perfekt:

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

Wenn es unbedingt über das LAN gemacht werden muss, würde ich rsync verwenden, da es dort weitermacht, wo es aufgehört hat, wenn es unterbrochen wird. Es gibt auch ein paar andere Tricks, um die übertragene Datenmenge zu minimieren, obwohl ich bezweifle, dass viele/alle davon für den Fall des Kopierens einer Musikbibliothek an einen unberührten Ort relevant sind. Wenn die Sicherheit ein Anliegen ist, setzen Sie einfach RSYNC_RSH=ssh als erstes und die Daten werden über ssh getunnelt.

Wenn ich das tatsächlich machen würde, würde ich das LAN wahrscheinlich gar nicht benutzen. Ich würde die Dateien auf eine USB-Festplatte kopieren und von dort wieder entfernen. Meiner Erfahrung nach kann das leicht um mehrere Größenordnungen schneller sein als der Weg über das LAN, obwohl die Dateien zweimal kopiert werden müssen - USB 2.0 ist für 480Mbps ausgelegt, was schneller ist als alles, was nicht Gigabit-Ethernet ist, und es ist weniger empfindlich gegenüber Bedingungen, die die Leistung eines LANs beeinträchtigen. Es ist auch völlig unabhängig vom Betriebssystem, vorausgesetzt, Sie verwenden ein Dateisystem, mit dem alle beteiligten Rechner umgehen können - ich würde VFAT/FAT32 empfehlen, da das so ziemlich universell ist.

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

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 bei mir folgendes ganz gut

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

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

Das funktioniert bei mir, um Dateien auf eingebetteten Systemen zu übertragen, die keinen ssh-Client oder scp eingebaut haben.

Kein scp - nur ssh.