Como posso enviar um único arquivo para vários sites remotos ao mesmo tempo?

5

O scp pode ser usado para enviar um único arquivo para vários servidores remotos ao mesmo tempo? Se sim, como? Se não, qual é a alternativa?

    
por MiNdFrEaK 15.09.2012 / 06:02

2 respostas

10

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
    
por 15.09.2012 / 06:47
1

Em vez de enviar um arquivo para vários destinos ao mesmo tempo, você pode lê-lo várias vezes ao mesmo tempo.

Transfira seu arquivo para o NFS, monte esse sistema de arquivos em seus destinos e copie-o do NFS para o seu destino local.

Para fazer isso manualmente e simultaneamente, você pode usar o cluster-ssh (cssh) nos destinos.

    
por 16.09.2012 / 00:05

Tags