複数のリモートコンピュータからファイルをローカルにコピーし、リモートコンピュータ用のディレクトリを作成する

複数のリモートコンピュータからファイルをローカルにコピーし、リモートコンピュータ用のディレクトリを作成する

複数の仮想マシンを研究し、仮想マシンから自分のローカルマシンにいくつかのファイルをコピーするための次のスクリプトを考えました。

SG=rohos; date; for i in `cat /etc/hosts | grep "$SG-" | awk '{print $2}'` ;do echo "Logging into ${i}";ssh -i /root/.ssh/vm_private_key keyless-user@${i} "sudo mkdir -p /tmp/${SG}/${i}; sudo cp /var/some.log /tmp/${SG}/${i}/ ";done

mkdirとcpのターゲットディレクトリを何度も入力しないように、このスクリプトで何を変更できますか?あるいは、rsyncのようなより良いツールがあれば教えてください。


SG=rohos
date 
for i in `cat /etc/hosts | grep "$SG-" | awk '{print $2}'` 
do 
  echo "Logging into ${i}"
  ssh -i /root/.ssh/vm_private_key keyless-user@${i} "sudo mkdir -p /tmp/${SG}/${i}; sudo cp /var/some.log /tmp/${SG}/${i}/ "
done

ベストアンサー1

あなたのスクリプトはあなたが望むことをすることはできません。作成したとおり、リモートホスト上のファイルのみが/tmp/$SG/$i同じリモートホストにコピーされます。

使用してscp置き換える必要があります。たとえば、sshcp

SG=rohos
date 
for i in $(awk "/$SG-/ {print \$2}" /etc/hosts); do 
  echo "Logging into $i"
  mkdir -p "/tmp/$SG/$i"
  scp -i /root/.ssh/vm_private_key "keyless-user@$i:/var/some.log" "/tmp/${SG}/${i}/"
done

コピーされたファイルのタイムスタンプと権限を維持するには、コマンド-pscpオプションを追加します。または、-rディレクトリツリー全体の再帰的なコピーを追加します。

man scpscpとそのオプションの詳細については、リソースを参照してください。

おすすめ記事