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 aufgefordert wurde , eine Menge , ü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, ...)?
quelle
Antworten:
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/
, aber wir könnten es genauso einfach tunscp ~/music/ user@host:~/newmusic
, 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
wird Ihnen alles darüber erzählen, wie man es benutzt. 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.
quelle
scp
zu funktionieren, müssen wir eine Art SSH-Server einrichten, Listener oder etwas auf der anderen Seite entsperren? Ich erhalte die Fehlermeldung "Verbindung abgelehnt".openssh-server
muss in Ubuntu Natty installiert werden.ssh
die Verschlüsselung verwendet wird, was zusätzlichen Aufwand verursacht. Wenn die beteiligten Computer über relativ langsame CPUs verfügen, kann dies einen Unterschied machen. In diesem Fallnetcat
oder in einem ähnlichen Fall (siehe Caspars Antwort) ist dies möglicherweise vorzuziehen. Natürlich nur, wenn Sie keine Verschlüsselung benötigen (in einem geschützten LAN).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, auf dem der Inhalt empfangen werden soll, 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 stattdessen auch einen anderen Port verwenden45454
.Was hier tatsächlich passiert, ist, dass der 'empfangende' Computer eine Verbindung zum sendenden Computer an Port 45454 herstellt und den tar- und gzip-Inhalt des Verzeichnisses empfängt und diesen direkt an tar (und gzip) weiterleitet, um ihn zu extrahieren das aktuelle Verzeichnis.
Kurzes Beispiel (localhost als Remote-Host verwenden)
Computer 1
Computer 2
quelle
-q
Option zeigt an, dass Sie verwenden openbsd-netcat , während Gnu-netcat ist auch durchaus üblich (default in Arch Linux ). Könnten Sie Ihre Antwort um die Syntax von gnu-netcat erweitern ?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.
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.
quelle
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:
Am Bestimmungsort:
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
durchlftp
die Befehlepget -n20
und zu ersetzenmirror -r
.quelle
Der schnellste ist wahrscheinlich
netcat
(wie von caspar beschrieben).Ich mag die Kombination von
tar
&ssh
, die sicher und trotzdem schnell ist:Auf der Quelle
Wenn Sie dies als root tun, bleiben die Dateiberechtigungen erhalten. Oder
-p
beidseitig verwenden. Auch-S
könnte in Betracht gezogen werden, wenn Sie spärliche Dateien haben.Es ist möglich, den Verschlüsselungsaufwand zu reduzieren,
ssh
wenn Siearcfour
als Verschlüsselung verwenden, die mit openSSH funktioniert:Das Aktualisieren des Remote-Pfads
rsync
ist perfekt:quelle
Wenn es unbedingt über das LAN gemacht werden muss, würde ich verwenden
rsync
, 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 es einfachRSYNC_RSH=ssh
zuerst 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 ein Vielfaches 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, das von allen beteiligten Computern unterstützt wird. Ich würde VFAT / FAT32 empfehlen, da dies so ziemlich universell ist.
quelle
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.
quelle
Ich verwende Unison , ein großartiger Dateisynchronisierer für viele verschiedene Protokolle. Sie können es so konfigurieren , zu verwenden
scp
,rcp
,ftp
oder auch lokal auf dem Dateisystem zwischen zwei Ordnern. 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, ist aber mit Sicherheit viel besser, als
scp
jedes Mal, wenn Sie einen neuen Song hinzufügen, Ihre gesamte Musiksammlung zu bearbeiten :)quelle
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 ganz gut
Übertragen von Daten vom lokalen Host zum Remote-Host.
cat localfile | ssh <user>@<ip> "cat > <path>/<remotefile>"
Übertragen von 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.
quelle