2016-10-26 3 views
1

リモートサーバーのハードドライブを上書きするローカルイメージファイルを書き込むスクリプトを作成しようとしばらくしています。 gzip圧縮を使ってnetcat上でLinux ddを使用しようとしています。 はリモートサーバをsshし、特定のポートでリッスンするためにnetcatコマンドでリモートddを実行してから、このリモートサーバのイメージを書き込むコマンドを起動します。 なぜ私にとってはうまくいかないのか分かりません。多くの前提があり、バックグラウンドでリモートスクリプトを実行したり、バックグラウンドでsshセッション自体を実行したりするなど、さまざまな方法で実行しようとしましたが、私の中からスクリプト。私が実行しようとしています コマンド:ddとnetcatを使用してリモートサーバー上のハードドライブを上書きするローカルイメージファイルを作成するスクリプトを作成します。

  1. は、SSHリモートサーバ:

    ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -i id_rsa (SERVER_IP) 
    
  2. リモートサーバー上のポート9023上でNC上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 
    

コマンドを1つずつ実行しようとすると、動作してddセッションが動作しています。スクリプトから実行しようとするとすぐにddセッションがハングします。

答えて

1

圧縮されたsshセッションを介してローカル入力をリダイレクトし、その入力を反対側で使用することができます。あなたはnetcatをせずに、直接これを行うことができます。

ssh -C [email protected] 'dd of=/dev/sda' < /path/to/local.image 

あなたはsshddのために必要な他の必要なオプションを追加します。

CompressionLevelのオプションman sshは、ご使用のケースでも面白いはずです。

+0

それは魅力のように機能します!ありがとう。 今、私はこのプロセスを監視しようとしています。これは、ddとncの両方をlistenとwriteに使用していたときにpvで監視できました。このソリューションでは動作しません。どのように進捗を監視するか? – inverminx

+0

'ssh host 'のように、' dd'の直前に 'pv'をパイプラインで追加することができます。pv | dd ... ' janos

関連する問題