pdcp
do pacote pdsh é uma opção. pdsh
foi escrito para ajudar no gerenciamento de clusters HPC - usei-o para isso e também o usei para o gerenciamento de várias máquinas não clusterizadas.
pdsh
e pdcp
usam sexos para definir hosts e grupos de hosts (um "grupo" é qualquer tag arbitrária que você escolher atribuir a um host, e os hosts podem ter quantas tags você quiser.)
Por exemplo, se você tivesse um grupo chamado 'webservers' em /etc/genders
que incluísse hostA, hostB, hostC, então pdcp -g webservers myscript.sh /usr/local/bin
copiaria myscript.sh para / usr / local / bin / em todos os três hosts. / p>
Da mesma forma, pdsh -g all uname -r
executaria uname -r
em cada host marcado com "all" em / etc / genders, com a saída de cada host prefixada com o nome do host.
$ 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
Os comandos pdsh e as cópias pdcp são executados em paralelo (com limites e tempos limite para evitar a sobrecarga do sistema de origem).
Quando o comando que está sendo executado produz uma saída de várias linhas, ele pode ficar confuso para leitura. Outro programa no pacote pdsh
chamado dshbak
pode agrupar a saída pelo nome do host para facilitar a leitura.
depois de ver todos os seus comentários, é possível que pdsh & O pdcp pode ser um exagero para as suas necessidades ... ele é realmente projetado para ser uma ferramenta do administrador do sistema em vez de uma ferramenta normal do usuário não-root.
Pode ser que escrever um invólucro de script de shell simples em torno de scp possa ser bom o suficiente para você. por exemplo. aqui está uma versão extremamente simples e minimalista de um script de wrapper.
#! /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