Como copiar arquivos para vários hosts na rede?

3

Eu tenho mais de 200 sistemas Ubuntu para os quais eu quero copiar um arquivo.

Como posso copiar arquivos para vários hosts na rede? Quais possibilidades eu tenho?

Nota: Esta questão está relacionada com Como encontrar a versão de uma máquina Ubuntu remotamente?

    
por karthick87 13.04.2011 / 10:22

3 respostas

3

Eu sei que você provavelmente só quer algo simples, mas existem dezenas de maneiras de fazer isso. Mas primeiro queremos ser capazes de controlar todos os computadores de uma só vez.

Isso pode parecer uma direção estranha, mas economizará seu tempo mais tarde quando você quiser enviar um desligamento, reinicializar, atualizar para todos os computadores.

clusterssh

Vamos instalar clusterssh e disparar um comando para conectar todos os nossos servidores de uma vez (isso pode não ser viável para 200 de uma só vez - não tenho 200 computadores para testá-lo!)

sudo apt-get install clusterssh
cssh user@first_computer:port user@second_computer:port ...

Isso gerará pequenas janelas de saída para cada conexão (por que eu digo 200 pode ser um trecho) e um diálogo de entrada global. De lá, você pode enviar o mesmo comando para todos os seus servidores.

Se você quiser fazer isso a partir da linha de comando, e isso pode dar suporte a 200 conexões, você pode ver o sinal -a para cssh . Você pode lançar um comando para cada servidor (ou string de comandos). Conectará, executará e fechará a conexão.

cssh -a 'cd directory; ls'  user@first_computer:port user@second_computer:port 

Você pode simplificar suas conexões usando a poderosa configuração do clusterssh . Abra man cssh e vá até a seção FILES . Explica como você pode criar um arquivo /etc/clusters para permitir que você crie rapidamente grupos (chamados de tags) assim:

clusters = <tag1> <tag2> <tag3>
<tag1> = host1 host2 host3
<tag2> = user@host4 user@host5 host6
<tag3> = <tag1> <tag2>

Então você pode fazer:

cssh -T 'tag2' -a 'cd directory; ls'

Use um repositório central

Não estou falando de um repo de debug (mas é possível também, acho), algo como git ou brz . Pode ser algo tão simples quanto um servidor da Web ou um compartilhamento de rede. Se a largura de banda da rede tiver gargalos nos locais, algo como um servidor de torrent pode até ser o melhor caminho (é assim que o Facebook atualiza todos os seus nós)

Informe sua rede para baixar os arquivos

A partir daqui, é só ligar os pontos. Usando cssh você acabou de dizer a todos os seus computadores para buscar o arquivo e fazer o que for necessário com ele.

Eu sugiro que você comece pequeno. Obter o arquivo compartilhado e, em seguida, tente um simples cluster de um par de computador e ver como vai. Expanda isso.

Sugiro que, mesmo depois de concluído, você mantenha um cluster de alguns computadores para testar antes de enviar itens para o grupo principal.

    
por Oli 13.04.2011 / 10:53
3

Como alternativa, você pode mantê-lo baseado em push. A maneira mais fácil é escrever um script que:

  1. Itera através de uma lista de servidores
  2. Conecta-se ao servidor e copia os arquivos (duas opções aqui):

    1. Usa sshfs para montar o sistema de arquivos remoto localmente, cp / rsync os arquivos, fusermount -u do diretório em que você montou (para desmontar o sistema remoto). Continue.
    2. Use apenas as habilidades de rede de rsync para copiar os arquivos.

      rsync /localdir/ user@remote:/remotedir
      
por Oli 13.04.2011 / 11:01
1

[A resposta de Oli veio enquanto eu digitava]

Uma alternativa aos clusters é scp paralela. Faz parte do pacote pssh

Você precisa fornecer a lista de hosts em um arquivo de texto (por exemplo, hosts.txt) e, em seguida, emitir:

parallel-scp -h hosts.txt file2copy.dat /target/directory

Consulte a página do manual para atender às suas necessidades específicas. Isso não deve atingir limites para muitas conexões, já que não é necessário abrir conexões ativas para todos, já que o cssh tentará isso sequencialmente.

PS: Ter uma configuração de autorização baseada em chave, naturalmente, torna isso muito mais fácil, mas eu suspeito que ter sua chave distribuída para 200 sistemas em primeiro lugar pode ser o motivo de você estar fazendo essa pergunta ...

    
por DrSAR 13.04.2011 / 11:01