単一のファイルを複数のリモートサイトに同時に送信するには?

単一のファイルを複数のリモートサイトに同時に送信するには?

scp単一のファイルを複数のリモートサーバーに同時に送信するために使用できますか?それでは、どうすればいいですか?そうでない場合、オプションは何ですか?

ベストアンサー1

pdcp~からPDSHパッケージはオプションです。 pdshこれは、HPCクラスタの管理を支援するために作成されました。 HPC クラスターの管理に使用し、クラスター化されていない複数のコンピューターの管理にも使用しました。

pdshそしてpdcp使用性別ホストとホストグループの定義(「グループ」はホストに割り当てるために選択したラベルであり、ホストには必要な数のラベルがあります。)

/etc/gendersたとえば、ホストA、ホストB、およびホストCを含む「webservers」というグループがある場合は、pdcp -g webservers myscript.sh /usr/local/binmyscript.shを3つのホストすべての/usr/local/bin/にコピーします。

同様にpdsh -g all uname -r、/etc/genders で「all」とマークされたすべてのホストで実行され、uname -r各ホストの出力にはホスト名が接頭辞で付けられます。

$ pdsh -g all uname -r
indra: 3.2.0-3-amd64
kali: 3.2.0-3-amd64
ganesh: 3.2.0-3-amd64
hanuman: 3.2.0-2-686-pae

pdshコマンドとpdcpコピーは並列に実行されます(元のシステムの過負荷を防ぐために制限とタイムアウトがあります)。

複数行の出力を生成するコマンドを実行すると、引用符を読みにくくすることができます。pdshパッケージ内の他のプログラムは、dshbak読みやすくするためにホスト名で出力をグループ化できます。


あなたの意見をすべて見た後、pdshとpdcpはあなたのニーズに比べて少し過剰になるかもしれません。実際には、root以外の一般ユーザーのためのツールではなく、システム管理者のためのツールとして設計されています。

scpの周りに単純なシェルスクリプトラッパーを書くだけで十分です。たとえば、以下は、これらのラッパースクリプトの非常にシンプルで最小限のバージョンです。

#! /bin/bash 

# a better version would use a command line arg (e.g. -h) to get a
# comma-separated list of hostnames, but hard-coding it here illustrates
# the concept well enough.
HOSTS="[email protected] [email protected]"

# last argument is the target directory on the remote hosts
target_dir="$BASH_ARGV"

# all but the last arg are the files to copy
files=${@:1:$((${#@} - 1))}

for h in $HOSTS; do
    scp $files "$h:$target_dir"
done

おすすめ記事