Distribuindo arquivos para máquinas em rede
Publicado por Heros Eloi Souza 29/12/2004
[ Hits: 8.078 ]
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
Configuração de failover de links de internet
Compactar com senha usando 7Zip
Free VPN - download de VPNs do vpnbook.com
procurar palavras dentro de todos os ficheiros de sub directorias
Script para automatizar OpenVpn
Nenhum coment�rio foi encontrado.
Aprenda a Gerenciar Permissões de Arquivos no Linux
Como transformar um áudio em vídeo com efeito de forma de onda (wave form)
Como aprovar Pull Requests em seu repositório Github via linha de comando
Aplicativo simples para gravar tela
Quebra de linha na data e hora no Linux Mint
Firefox não abre em usuário não administradores (2)
Ubuntu com problemas no áudio (1)
Sempre que vou baixar algum pacote acontece o erro dpkg (8)
tentando instalar em um notebook antigo o Linux LegacyOS_2023... [RESO... (8)