如何使用 dd、netcat 和 ssh 隧道设置磁盘克隆?

如何使用 dd、netcat 和 ssh 隧道设置磁盘克隆?

我想dd使用 netcat 通过 Linux 上的 ssh 加密通道将内容从主机 A 批量复制到主机 B(使用 重新映像磁盘)。

我应该在两端输入什么命令?

答案1

从源复制到目标,其中目标已运行 sshd:

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

当目标未运行 sshd 时,通过 sshd_host 从源复制到目标。

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

    -如果=是源头,的=是目的地,bs=是块大小。不同的块大小可能会提高性能。16 通常是一个相当合理的起点。您也可以使用數量=指示要复制多少个块。

    数控--p表示用于服务的端口。 -l用于启动服务。 -w设置在退出之前等待管道中的数据的时间。

    远程控制--L在远程主机上设置隧道。参数的格式为。local_port:target_host:target_port您的本地程序 (nc) 连接到 local_port,此连接通过隧道连接到 target_host 上的 target_port。

定义的选项只是用于此目的。请参阅手册页以了解更多详细信息。

几点说明:

  1. 如果您在 LAN 以外的任何网络上执行此操作,我建议使用 gzip 或 compress 压缩数据流。Bzip2 也可以工作,但它需要更多的 CPU 时间。第一个有这种用法的示例。
  2. 如果源分区未安装或以只读方式安装,则效果会更好。如果不是,则需要 fsck 目标映像。
  3. 除非其中一台机器有 netcat 但没有 ssh,否则这里实际上不需要 netcat。这种情况如下:

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

  1. 如果源和目标大小相同,则 dd 效果最佳。如果不同,则目标必须是两者中较大的一个。
  2. 如果您使用的是 ext2/3 或 xfs,dump(或 xfsdump)和 restore 可能是更好的选择。它不会处理引导扇区,但当目标和源的大小不同时它可以工作。

答案2

不需要 netcat。

在 src 机器上运行:

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

我假设 sdX 和 sdY 上的任何分区都未安装。你可以使用以下命令启动这两个盒子诺皮克斯或其他类似的实时发行版。

dd-从中获取数据如果[ 如果没有提供 - 从 stdin 中获取 ],将数据发送到[如果未提供-数据将发送到标准输出]。BS- 块大小...将加快速度。

ssh-在远程框中执行引号中提供的命令,所有传输到 ssh 的标准输入的数据将通过隧道传输到远程机器,并作为标准输入提供给在那里执行的命令。

答案3

主机 A 是要进行映像处理的主机,主机 B 是将存储映像的主机:

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

恢复到磁盘只会交换这两者。

答案4

使用 netcat 进行基本复制描述在这里

如果你需要SSH参与其中,你可以使用转发端口在那之上,

-R [bind_address:]port:host:hostport

但是,总的来说,您首先可以进行 SSH 传输(无需 netcat)。

相关内容