
scp
単一のファイルを複数のリモートサーバーに同時に送信するために使用できますか?それでは、どうすればいいですか?そうでない場合、オプションは何ですか?
答え1
pdcp
~からPDSHパッケージはオプションです。 pdsh
これは、HPCクラスタの管理を支援するために作成されました。 HPC クラスターの管理に使用し、クラスター化されていない複数のコンピューターの管理にも使用しました。
pdsh
そしてpdcp
使用性別ホストとホストグループの定義(「グループ」はホストに割り当てるために選択したラベルであり、ホストには必要な数のラベルがあります。)
/etc/genders
たとえば、ホストA、ホストB、およびホストCを含む「webservers」というグループがある場合は、pdcp -g webservers myscript.sh /usr/local/bin
myscript.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
答え2
同時に複数の宛先にファイルを送信する代わりに、ファイルを同時に複数回読み取ることができます。
ファイルをNFSに転送し、ターゲットにファイルシステムをマウントし、NFSからローカルターゲットにコピーします。
これを手動で同時に実行するには、ターゲットでCluster-Ssh(cssh)を使用できます。