SSH経由で複数のリモートサーバーのディレクトリをlocalhostにコピーする

SSH経由で複数のリモートサーバーのディレクトリをlocalhostにコピーする

bashスクリプトを介して複数のLinuxホストからlocalhostにディレクトリをインポートしようとしています。ただし、このhostnameコマンドはリモートホストではなくローカルホストからの出力を表示します。すべてのサーバーのディレクトリ構造は/home/user/HOSTNAME-BCKPです。

#!/bin/bash
for i in $(cat hosts);
do
scp -r $i:/home/user/`hostname`-BCKP/home/user/ALL-BCKPs/;
done

答え1

必要に応じてhostname- コマンドを表示離れてホスト名を使用するには、リモートホストで実行する必要があります。

これを連想配列として読んで繰り返すことができます。

#!/bin/bash -

declare -A myhosts
for item in $(cat hosts); do
  myhosts[$item]="$(ssh $item 'hostname')"
done

for key in "{!myhosts[@]}" ; do
  scp -r $key:/home/user/${myhosts[$key]}-BCKP /home/user/ALL-BCKPs/
done

ただし、これを複数回実行するには、各行にホストとホスト名のペアを含むファイルを作成することをお勧めします。

whileループから読み取ることができます。

while read -r myhost myhostname; do
  # do something with $myhost and $myhostname
done < yourfile

関連情報