使用 dd 和 netcat 创建一个脚本来写入本地图像文件以覆盖远程服务器上的硬盘驱动器

Create a script that write a local image file to override hard drive on a remote server using dd and netcat

我苦苦挣扎了一段时间,试图创建一个脚本来编写本地图像文件以覆盖远程服务器上的硬盘驱动器。 为此,我正在尝试通过 gzip 压缩在 netcat 上使用 Linux dd。 将 ssh 远程服务器,执行远程 dd over netcat 命令以侦听特定端口,然后启动命令为该远程服务器写入映像。 我不确定为什么它对我不起作用,我有很多假设并且我尝试通过多种方式来做到这一点,包括 运行 在后台使用远程脚本,或者在后台使用 ssh 会话本身 - 但它在脚本中对我不起作用。 我正在尝试的命令 运行:

  1. ssh 远程服务器:

    ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -i id_rsa (SERVER_IP)
    
  2. 在远程服务器上通过 nc 在端口 9023 上启动 dd 的 lisen 会话并使用 gunzip 解压缩:

    /bin/nc -l -p 9023|/bin/gunzip -c|/bin/dd bs=64k of=/dev/sda &
    
  3. 退出到主服务器执行:

    dd if=/var/tmp/ADT/Server-full/image.gz bs=64k |pv|nc (SERVER_IP) 9023
    

当尝试 运行 一个接一个地运行命令时,dd 会话正在运行。当尝试从脚本 运行 它时,dd 会话立即挂起。

您可以通过压缩的 ssh 会话重定向本地输入,并在另一端使用该输入。你可以直接在没有 netcat 的情况下执行此操作:

ssh -C user@server 'dd of=/dev/sda' < /path/to/local.image

添加 sshdd 所需的其他必要选项。

man ssh 中的 CompressionLevel 选项对于您的用例也应该很有趣。