Distribuindo arquivos para máquinas em rede
Publicado por Heros Eloi Souza 29/12/2004
[ Hits: 7.941 ]
Gostaria de compartilhar com vocês um script que fiz para distribuição arquivos numa rede Linux. A idéia surgiu a partir da necessidade de atualizar arquivos de configuração das estações de trabalho da rede. Poupa o trabalho de ficar fazendo scp toda hora e acabar esquecendo de alguma máquina.
#!/bin/bash # # Autor: Heros Eloi (heroseloi@gmail.com) # # Este script tem a intenção de distribuir arquivos de qualquer natureza # para computadores conectados em rede. # # Licensa: GPL # # Para maior compreenssão, vamos chamar de "servidor" a máquina de origem # dos arquivos a serem distribuidos e "cliente" a máquina que receberá # o arquivo via scp. # # Para que o script funcione verifique se os requisitos abaixo estão atendidos: # # 1 - Necessário openssl (servidor e cliente) versão >= 0.9 # 2 - Pacote dialog (servidor) com versão >= 0.9 # # ---------------------- # # Importante # # Este script envia os arquivos com base no nome das máquinas. # Exemplo: # scp /tmp/arquivo.conf maquina1:/etc/ # # Portanto verifique se os nomes contidos no arquivo mencionado abaixo # ($LISTA_HOSTS) podem ser acessados via rede. Para solucionar isso # configure um dns na sua rede e alere o '/etc/resolv.conf' ou adicione # os hosts no arquivo '/etc/hosts' # # ---------------------- # # Mais rápido # # Numa situação onde são enviados muitos arquivos para muitos hosts é # interessante que essa conexão seja feita sem pedir senha usando chave # pública para conexões ssh. Fica mais rápido e poupa o trabalho de # ficar digitando senha para cada envio. # # Indico alguns tutoriais que ensinam a fazer isso: # http://www.linuxit.com.br/modules.php?name=Sections&op=viewarticle&artid=187 # http://www.underlinux.com.br/modules.php?name=Sections&op=viewarticle&artid=218 # ---------------------- # # Instalação # # Para definir quais as maquinas da sua rede que receberão os arquivos, crie # um arquivo com qualquer nome e adicione o caminho dele no parametro # 'LISTA_HOSTS'. # Esse arquivo deverá ter tres colunas separadas por <TAB> como segue o # modelo abaixo. # # Exemplo: # ---------------------------------------------- # nomedamaquina ip qualquercaracter # ---------------------------------------------- # maquina1 10.1.0.30 . # maquina8 10.1.0.12 . # LISTA_HOSTS=/etc/hosts_ativos # # Este arquivo será criado automaticamente contendo listagem dos hosts # selecionados pelo usuario LISTAGEM_HOSTS=/tmp/listagem_hosts > $LISTAGEM_HOSTS # # ponto de partida para selecao de arquivos DIRETORIO_BASE=/mnt/backup/ # # Este arquivo é criado automaticamente contendo listagem dos arquivos # selecionados pelo usuario LISTAGEM_ARQUIVO=/tmp/listagem_arquivos > $LISTAGEM_ARQUIVO # # # # ######################################################################### # funcao que faz a selecao dos hosts para onde serao enviados os arquivos ######################################################################### selecao_dos_hosts() { SELECAO_HOST=$(dialog \ --stdout \ --separate-output \ --title "Envio de arquivos" \ --checklist "Escolha o host destino" \ 0 0 0 \ $(for i in `cat $LISTA_HOSTS`; do echo -e "$i\n"; done 2>> /dev/null) ) if [ $? -eq 0 ] then # se o usuario nao selecionou nenhum host SELECAO_HOST=`echo ${SELECAO_HOST:="vazia"}` if [ $SELECAO_HOST == "vazia" ] then selecao_host_vazio selecao_dos_hosts else echo $SELECAO_HOST >> $LISTAGEM_HOSTS return 0 fi else return 1 fi } ######################################################################### # funcao que faz a selecao dos arquivos a serem enviados ######################################################################### selecao_dos_arquivos() { SELECAO_ARQUIVO=$(dialog \ --stdout \ --title "Envio de arquivos" \ --fselect $DIRETORIO_BASE \ 10 80) if [ $? -eq 0 ] then verifica_arquivo else finalizacao fi } ######################################################################## # usuario nao selecionou nenhum host para envio # ######################################################################## selecao_host_vazio() { dialog \ --title "AVISO" \ --msgbox "\nPelo menos um host deve ser selecionado!\n" \ 9 40 } ######################################################################### # arquivo nao existe ######################################################################### arquivo_nao_existe() { dialog \ --title "AVISO" \ --msgbox "\n$SELECAO_ARQUIVO\n\nnão existe ou não é um arquivo!\n" \ 9 40 } ######################################################################### # confirma inclusao de arquivo ######################################################################### confirma_arquivo() { dialog \ --title "AVISO" \ --yesno "\nConfirma o envio do arquivo $SELECAO_ARQUIVO ?\n\n" \ 0 0 } ######################################################################### # confirmação para o envio de mais arquivos ######################################################################### envia_mais_arquivo() { dialog \ --title "AVISO" \ --yesno "\nDeseja selecionar mais algum arquivo?\n\n" \ 0 0 } ######################################################################### # exibe os arquivos selecionados pelo usuario ######################################################################### arquivos_selecionados() { dialog \ --title "Arquivos a serem enviados" \ --textbox $LISTAGEM_ARQUIVO \ 0 0 } ######################################################################### # exibe os hosts que receberão os arquivos selecionados ######################################################################### hosts_selecionados() { dialog \ --title "Hosts que receberão os arquivos" \ --textbox $LISTAGEM_HOSTS \ 0 0 } ######################################################################### # verificação e confirmação do arquivo selecionado ######################################################################### verifica_arquivo() { if [ -f $SELECAO_ARQUIVO ] then confirma_arquivo if [ $? -eq 0 ] # cofirma sim then # grava selecao em arquivo echo $SELECAO_ARQUIVO >> $LISTAGEM_ARQUIVO envia_mais_arquivo if [ $? -eq 0 ] then selecao_dos_arquivos else arquivos_selecionados hosts_selecionados fi else selecao_dos_arquivos fi else arquivo_nao_existe selecao_dos_arquivos fi } ######################################################################### # mensagem final ao usuario ######################################################################### finalizacao() { dialog \ --title "Saindo..." \ --infobox "\nObrigado por usar este script!\n\nheroseloi@gmail.com\n" \ 0 0 sleep 2s exit 0 } ######################################################################### # o usuario informa o diretorio onde os arquivos serão salvos no host ######################################################################### diretorio_destino_host() { CAMINHO_DESTINO_HOST=$(dialog \ --stdout \ --title "Diretório destino" \ --inputbox "Insira o caminho onde os arquivos serão salvos:" \ 7 60) if [ $? -ne 0 ] then finalizacao fi } ######################################################################### # faz o scp para as maquinas ######################################################################### envio_dos_arquivos() { dialog \ --title "Aguarde" \ --infobox "\nEnviando os arquivos..." \ 0 0 VAR_HOST=`cat $LISTAGEM_HOSTS` VAR_HOST=`echo ${VAR_HOST:="vazia"}` contador=1 # divide as palavras AUX_HOST=`echo $VAR_HOST | awk '{print $'$contador'}'` # enquanto variavel não é nula while [ ! -z $AUX_HOST ] do echo -e "\nMaquina $AUX_HOST:" for AUX_ARQ in `cat $LISTAGEM_ARQUIVO` do scp $AUX_ARQ $AUX_HOST:$CAMINHO_DESTINO_HOST done contador=`expr $contador "+" 1` AUX_HOST=`echo $VAR_HOST | awk '{print $'$contador'}'` echo -e "\nTecle <ENTER>\c" read lixo done echo -e "\nArquivos enviados...\nTecle <ENTER>\c" read lixo finalizacao } ######################################################################### # funcao principal ######################################################################### selecao_dos_hosts if [ $? -eq 0 ] then selecao_dos_arquivos diretorio_destino_host envio_dos_arquivos else finalizacao fi
Ativando o MRTG para Roteadores via SNMP
Descompactar vários arquivos ao mesmo tempo de um diretório específico
Troca de link em caso de queda de Internet (FAILOVER)
Nenhum comentário foi encontrado.
Compartilhando a tela do Computador no Celular via Deskreen
Como Configurar um Túnel SSH Reverso para Acessar Sua Máquina Local a Partir de uma Máquina Remota
Configuração para desligamento automatizado de Computadores em um Ambiente Comercial
Como renomear arquivos de letras maiúsculas para minúsculas
Imprimindo no formato livreto no Linux
Vim - incrementando números em substituição
Efeito "livro" em arquivos PDF
Como resolver o erro no CUPS: Unable to get list of printer drivers
Melhorando a precisão de valores flutuantes em python[AJUDA] (9)
GLPI - Configuração de destinatário com conta Microsoft Exchange (0)
Vou voltar moderar conteúdos de Dicas e Artigos (3)
OpenVPN no MACBOOK conecta mas não pinga pastas de rede compartilhada ... (1)
[Python] Automação de scan de vulnerabilidades
[Python] Script para analise de superficie de ataque
[Shell Script] Novo script para redimensionar, rotacionar, converter e espelhar arquivos de imagem
[Shell Script] Iniciador de DOOM (DSDA-DOOM, Doom Retro ou Woof!)
[Shell Script] Script para adicionar bordas às imagens de uma pasta