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

Bash 创建一个脚本,使用dd和netcat编写本地映像文件以覆盖远程服务器上的硬盘驱动器,bash,ssh,netcat,dd,Bash,Ssh,Netcat,Dd,我正在努力创建一个脚本,编写一个本地映像文件来覆盖远程服务器上的硬盘驱动器。 为此,我正在尝试通过netcat使用LinuxDD和gzip压缩。 将ssh连接到远程服务器,通过netcat执行远程dd命令以侦听特定端口,然后启动命令为此远程服务器写入映像。 我不知道为什么它对我不起作用,我有很多假设,我尝试了很多方法,包括在后台运行远程脚本,或者在后台运行ssh会话本身,但是在脚本中它对我不起作用。 我正在尝试运行的命令: ssh远程服务器: ssh -o StrictHostKeyChecki

我正在努力创建一个脚本,编写一个本地映像文件来覆盖远程服务器上的硬盘驱动器。 为此,我正在尝试通过netcat使用LinuxDD和gzip压缩。 将ssh连接到远程服务器,通过netcat执行远程dd命令以侦听特定端口,然后启动命令为此远程服务器写入映像。 我不知道为什么它对我不起作用,我有很多假设,我尝试了很多方法,包括在后台运行远程脚本,或者在后台运行ssh会话本身,但是在脚本中它对我不起作用。 我正在尝试运行的命令:

  • ssh远程服务器:

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

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

    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
    
    ssh-Cuser@server'dd of=/dev/sda'
    添加
    ssh
    dd
    所需的其他必要选项


    manssh
    中的
    CompressionLevel
    选项对于您的用例来说也应该很有趣。

    它就像一个魔咒!谢谢现在我正试图监视这个过程,当它使用dd和nc进行侦听和写入时,我可以使用pv来监视它。使用此解决方案是行不通的。知道如何监控进度吗?您可以在管道中的
    dd
    前面添加
    pv
    ,比如
    ssh主机'pv|dd…'