Frage Wie richte ich das Disk-Klonen mit dd, netcat und ssh tunnel ein?


Ich möchte Sachen in großen Mengen kopieren (Reimage - Disk mit dd) mit netcat von Host A nach B über ssh verschlüsselten Kanal unter Linux.

Welche Befehle sollte ich an beiden Enden eingeben?


24
2017-08-07 17:32


Ursprung




Antworten:


Kopieren von Quelle zu Ziel wo sshd ausgeführt wird:

  • dd if=/dev/sda | gzip | ssh root@target 'gzip -d | dd of=/dev/sda'

Kopieren von Quelle zu Ziel über sshd_host, wenn Ziel nicht sshd ausgeführt wird.

  • Ziel:  nc -l -p 62222 | dd of=/dev/sda bs=$((16 * 1024 * 1024))
  • Quelle:  ssh -L 62222:target:62222 sshd_host &
  • Quelle:  dd if=/dev/sda | nc -w 3 localhost 62222

    dd - wenn = ist die Quelle, von = ist das Ziel, bs = ist die Blockgröße. Unterschiedliche Blockgrößen können die Leistung verbessern. 16 ist normalerweise ein ziemlich vernünftiger Ausgangspunkt. Sie können auch verwenden zählen = um anzugeben, wie viele Blöcke kopiert werden sollen.

    nc - -p Gibt den Port an, der für Dienste verwendet werden soll. -l wird verwendet, um einen Dienst zu starten. -w Richtet die Zeit für das Warten auf Daten in der Pipline vor dem Beenden ein.

    ssh - -L richtet den Tunnel auf dem Remote-Host ein. Das Format des Arguments ist, local_port:target_host:target_port. Ihr lokales Programm (nc) verbindet sich mit dem local_port, diese Verbindung wird getunnelt und mit target_port auf dem target_host verbunden.

Die definierten Optionen sind nur die, die dafür verwendet werden. Sehen Sie sich die Manpages für weitere Details an.

Ein paar Anmerkungen:

  1. Wenn Sie dies über etwas anderes als ein LAN hinaus tun, würde ich vorschlagen, den Datenstrom mit gzip zu komprimieren oder zu komprimieren. Bzip2 würde auch funktionieren, aber es dauert ein bisschen mehr CPU-Zeit. Der erste hat ein Beispiel für diese Verwendung.
  2. Es ist besser, wenn die Quellpartition nicht bereitgestellt ist oder schreibgeschützt ist. Wenn nicht, müssen Sie das Zielbild durchsuchen.
  3. Es sei denn, eine der Maschinen hat netcat, aber nicht ssh, netcat wird hier nicht wirklich benötigt. Dieser Fall würde wie folgt aussehen:

source machine dd -> nc -> ssh -> ssh tunnel -> sshd server -> nc on target -> dd

  1. dd funktioniert am besten, wenn die Quelle und die Ziele dieselbe Größe haben. Wenn nicht, muss das Ziel der größere der 2 sein.
  2. Wenn Sie ext2 / 3 oder xfs verwenden, können dump (oder xfsdump) und restore eine bessere Option sein. Es wird nicht mit dem Boot-Sektor umgehen, aber es funktioniert, wenn das Ziel und die Quelle unterschiedliche Größen haben.

26
2017-08-07 19:14





Wenn Sie Netcat ohne SSH verwenden möchten. Ich nehme an, dass dies der schnellste und nicht der sicherste Weg ist. Sie können die gesamte Festplatte kopieren und wiederherstellen:
Auf Computer A mit IP 192.168.0.1

cat /dev/hdb | nc -p 9000


4
2017-08-07 18:11





netcat wird nicht benötigt.

auf src Maschinenlauf:

dd if=/dev/sdX bs=1M | ssh root@dstMachine " dd of=/dev/sdY bs=1M"

Ich nehme an, keine der Partitionen auf SDX und SDY sind eingehängt. Sie können beide Boxen mit booten knoppix oder eine andere ähnliche Live-Distribution.

dd - nimmt Daten von ob [wenn nicht angegeben - nimmt es von stdin], sendet Daten an von [falls nicht angegeben - Daten werden an stdout gesendet]. bs - Blockgröße ... wird die Dinge beschleunigen.

ssh - Führt Befehle aus, die in Anführungszeichen für Remote-Box angegeben sind. Alle Daten, die nach stdin von ssh gepumpt werden, werden zur entfernten Maschine getunnelt und porovided als stdin zum dort ausgeführten Befehl.


3
2017-08-07 17:47



also wird es unmöglich sein auf der montierten Platte? - Evgeny
@Evgeny es wird in Ordnung sein, wenn die Festplatte als schreibgeschützt eingehängt wird. Ansonsten - tu es nicht ... deine Kopie wird inkonsistent sein. - pQd


Host A ist derjenige, der aufgenommen werden soll, Host B ist der, auf dem das Bild gespeichert wird:

root@A# dd if=/dev/sda | ssh root@B "dd of=/some/file"

Das Wiederherstellen auf die Festplatte würde nur diese beiden tauschen.


2
2017-08-07 17:48





Die Basiskopie mit netcat ist hier beschrieben.

Wenn du musst SSH daran beteiligt, könnten Sie verwenden Port-Weiterleitung darüber,

-R [bind_address:]port:host:hostport

Aber im Großen und Ganzen können Sie den SSH-Transfer überhaupt durchführen (ohne Netcat).


1
2017-08-07 17:46





Solange die Dateisysteme nicht angehängt sind, funktioniert dd gut.

(from server1) dd if=/dev/sda bs=32k | ssh <server2> dd of=/dev/sda bs=32k

Sie müssen die Hostkey-Authentifizierung im Voraus einrichten, da sonst die Kennwortabfrage zum Fehlschlagen der Kopie führt.

Wenn Sie dies auf einem bereitgestellten Volume tun, wird dies zu schlechten Ergebnissen führen.


1
2017-08-07 17:47



Vielen Dank. sind Zitate notwendig? - Evgeny


Oder Sie könnten clonezilla verwenden und Ihren Remote-Speicher über sshfs "mounten".


1
2017-08-08 02:00



Wenn Sie eine Partition kopieren, soll die Zielpartition nicht ausgehängt werden? Weitere Details zu dieser Option wären hilfreich. - Mark Stosberg