创建一个脚本,使用dd和netcat

时间:2016-10-26 15:23:03

标签: bash ssh netcat dd

我正在努力创建一个编写本地映像文件以覆盖远程服务器上的硬盘驱动器的脚本。 因为我试图使用Linux dd over netcat与gzip压缩。 将ssh一个远程服务器,执行远程dd over netcat命令以侦听特定端口,然后启动命令为该远程服务器写入映像。 我不知道为什么它不适合我,我有很多假设,我试图在很多方面做到这一点,包括在后台运行远程脚本,或者在背景上使用ssh会话 - 但它对我不起作用从脚本中。 我试图运行的命令:

  1. ssh远程服务器:

    ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -i id_rsa (SERVER_IP)
    
  2. 在远程服务器上启动端口9023上的dd over nc的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
    
  4. 当尝试逐个运行命令时,它可以工作,并且dd会话正在运行。当尝试从脚本运行它时,dd会话立即挂起。

1 个答案:

答案 0 :(得分:1)

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

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

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

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