Distribuindo arquivos para máquinas em rede
Publicado por Heros Eloi Souza 29/12/2004
[ Hits: 7.952 ]
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
Iniciar firewall quando houver rede habilitada (Internet)
Nenhum comentário foi encontrado.
Enviar mensagem ao usuário trabalhando com as opções do php.ini
Meu Fork do Plugin de Integração do CVS para o KDevelop
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
Compartilhamento de Rede com samba em modo Público/Anônimo de forma simples, rápido e fácil
Cups: Mapear/listar todas as impressoras de outro Servidor CUPS de forma rápida e fácil
Criando uma VPC na AWS via CLI
Tem como instalar o gerenciador AMD Adrenalin no Ubuntu 24.04? (12)