Distribuindo arquivos para máquinas em rede
Publicado por Heros Eloi Souza 29/12/2004
[ Hits: 8.019 ]
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
Alterando resolução de monitor externo
bookmaker.bash: Script para imprimir livros com 4 páginas em uma folha
Execução temporizada de programas
Instalação do Cacti v0.8.7g + Plugins
Cria ambiente virtual (VirtualHost no Apache e Virtual Mail no Postfix) para desenvolvimento web
Nenhum comentário foi encontrado.
Instalar e Configurar o Slackware Linux em 2025
Como configurar os repositórios do apt no Debian 12 em 2025
Passkeys: A Evolução da Autenticação Digital
Instalação de distro Linux em computadores, netbooks, etc, em rede com o Clonezilla
Como colorir os logs do terminal com ccze
Instalação Microsoft Edge no Linux Mint 22
Como configurar posicionamento e movimento de janelas no Lubuntu (Openbox) com atalhos de teclado
Máquinas Virtuais com IP estático acessando Internet no Virtualbox
Instalação do Ubuntu 22.04 LTS (1)
Não consigo executar arquivos .jar no linux (4)
Alguns sistemas não estão funcionando adequadamente apos a configuraçã... (0)
Compartilhando uma ideia sobre computação quantica (14)
Programadores e não programadores, uma nova era se inicia... (3)