Verschieben von Dateien zwischen Hosts mithilfe eines Zwischenspeicherbereichs

Verschieben von Dateien zwischen Hosts mithilfe eines Zwischenspeicherbereichs

Gibt es eine gute Lösung zum Verschieben von Dateien von Host A zu Host C, wobei Host B als passiver Zwischenspeicherbereich verwendet wird?

A -> B -> C

Einschränkungen

  • Host A und Host C befinden sich in getrennten Netzwerken und können nicht aufeinander zugreifen. Zwischen A und C können keine Tunnel geöffnet werden.
  • Sowohl Host A als auch Host C können periodische Prozesse ausführen und planen.
  • Host B stellt lediglich einen Speicherbereich bereit und kann sowohl von Host A als auch von Host C über SSH aufgerufen werden.
  • B ist „passiv“ und stellt lediglich den Speicherplatz bereit.
  • Somit fungiert A als Schreiber (von Dateien auf B) und C als Leser (von Dateien auf B).
  • Dateien, die erfolgreich von Host A zu Host C (über B) kopiert wurden, können dann auf Host A gelöscht werden.
  • Auf Host A sollten keine Dateien gelöscht werden, bis eine Garantie (eine Quittung mit einer Dateiprüfsumme?) vorliegt, dass sie erfolgreich auf Host C gelandet sind.
  • Zu den Sonderfällen gehört die Verwaltung von Netzwerkausfallzeiten, vollen Festplatten, unterbrochenen Prozessen usw.

Ziel ist es, in regelmäßigen Abständen Dateien von A nach C zu verschieben und dabei B als Zwischenspeicher zu verwenden.

Wir können davon ausgehen, dass auf allen Hosts Unix/Linux läuft. Bevorzugte Tools: ssh/rsync/bash + andere „Standard“-Tools.

Ich dachte daran, eine Lösung zu erstellen, indem ich in zwei Schritten einige Bash-Skripte um rsync herum verwende und Quittungen mit Prüfsummen verwende, um festzustellen, wann eine Datei erfolgreich vollständig verschoben wurde.

Gibt es bereits Lösungen?

Antwort1

Ich sehe keine Notwendigkeit, irgendetwas auf B zu speichern, Sie können es einfach verwenden, um Verbindungen zwischen A und C mithilfe einer beliebigen Proxy-Software wie SSH-Portweiterleitung oder Socks herzustellen. Vielleicht könnten Sie sogar über B routen/naten?

Oder, da Sie ausdrücklich danach gefragt haben, könnten Sie es auf Ihre Weise tun, indem Sie NFS/Samba verwenden, um die Dateien zu kopieren und die Fertigstellung mit verschiedenen Methoden zu überprüfen. Was mir in den Sinn kommt, wäre, eine Datei auf der Freigabe zu erstellen, um Nachrichten vom Typ „Kopieren abgeschlossen“ oder „OK zum Löschen“ zwischen beiden Systemen zu übermitteln. Oder, wie Sie sagten, etwas mit MD5 usw. Wie auch immer Sie es machen, ich bin ziemlich sicher, dass es eine Sonderanfertigung sein wird. Aber keine schwierige. Ich bezweifle, dass es bereits Möglichkeiten gibt, Ihr Problem auf diese Weise zu lösen.

Antwort2

Der Kommentar von Sven zu deiner Frage ist auf jeden Fall der richtige Weg.

Sie können es so machen:

  1. Von ASSH nach B, Erstellen eines Tunnels auf Port 5000

    ssh someuser@B -L 5000:127.0.0.1:5000
    
  2. Von dieser Shell aus Bwird per SSH Cein zweiter Tunnel erstellt, der am CSSH-Server von endet.

    ssh someuser@C -NL 5000:127.0.0.1:22
    
  3. Von einem zweiten Terminal aus Akönnen Sie Ihre Dateien direkt mit rsync synchronisieren.C

    rsync -avz -e "ssh -p 5000" --progress --remove-source-files /source/directory [email protected]:/destination/directory
    

Es könnte sogar möglich sein, die Tunnel in Schritt 1 und 2 mit einem Befehl einzurichten, aber bei meinem Schnelltest war das nicht möglich. Möglicherweise muss ich SSH-Schlüssel auf Bund einrichten C.

Wenn Sie den Kopiervorgang automatisieren möchten, sollten Sie sich etwas wieautosshum die Tunnel über Dienste für Sie auf- und abzubauen. Oder Sie können es über Cron tun.

verwandte Informationen