De acordo com as Leis 12.965/2014 e 13.709/2018, que regulam o uso da Internet e o tratamento de dados pessoais no Brasil, ao me inscrever na newsletter do portal DICAS-L, autorizo o envio de notificações por e-mail ou outros meios e declaro estar ciente e concordar com seus Termos de Uso e Política de Privacidade.
Colaboração: Aldemari Borges
Data de Publicação: 02 de Julho de 2009
Esta proposta visa criar um sistema de backup baseado em Shell Script, além dos comandos nativos do Linux.
Vamos ao passos:
No servidor cliente(aquele que enviará seu próprio backup para o repositório remoto):
root@clienthost:~# adduser backscp
Obs: Colocar senha bastante difícil, já que este usuário existirá em todas as máquinas.
Obs: Há a possibilidade de restringir o acesso via ssh por hosts e users(ver manual do openssh server)
Afim de criarmos uma solução independente das chaves do host criadas em
/etc/ssh
, iremos criar uma chave específica para o usuário em questão.
Estas chaves se localizarão no ~.ssh
(diretório local do usuário backscp,
na pasta oculta .ssh
).
Digite o comando abaixo:
backscp@clienthost:~$ ssh-keygen
Tecle 'Enter' até a finalização do processo de criação como abaixo:
Generating public/private rsa key pair. Enter file in which to save the key (/home/backscp/.ssh/id_rsa): Created directory '/home/backscp/.ssh'. Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /home/backscp/.ssh/id_rsa. Your public key has been saved in /home/backscp/.ssh/id_rsa.pub. The key fingerprint is: fc:d5:81:59:96:cb:a7:e7:81:19:93:39:30:41:01:b3 backscp@borges The key's randomart image is: +--[ RSA 2048]----+ | oo+o o. | | oo =. | | E =.+. | | . Bo..| | S . Bo | | . . o...| | . o.| | .| | | +-----------------+
O comando acima gerou uma chave criptográfica de 2048 bits, utilizando o algoritmo RSA.
Temos então:
backscp@clienthost:~$ scp .ssh/id_rsa.pub backscp@repositoriohost:~
No servidor remoto(REPOSITÓRIO):
com o usuário backscp
(como sugestão apenas):
backscp@repositoriohost:~$ mkdir ~.ssh backscp@repositoriohost:~$ cat id_rsa.pub »» .ssh/authorized_keys
PRONTO!!! Estabelecemos a relação de confiança entre as máquinas via ssh
Para testar:
No servidor remoto(repositoriohost) apague o ~/id_rsa.pub
No servidor cliente(clienthost) re-envie o arquivo do id_rsa.pub
:
scp .ssh/id_rsa.pub backscp@repositoriohost:~
Não deverá ser solicitada a senha, o arquivo deverá ser copiado de forma transparente.
OBSERVAÇÃO
Para cada clienthost (máquina que pretende-se backapear), deverá ser
adicionado ao arquivo autorized_keys
do servidor repositório
(cat id_rsa.pub >> .ssh/authorized_keys
)
Vantagens até o momento:
Poderíamos fazer mapeamentos NFS ou CIFS, no entanto, haveria sempre sessões
abertas no cliente/servidor. O que de certa forma, para redes maiores, poderá
afetar em alguns milisegundos. Com a solução de envio via scp
(secure copy),
apenas será aberta a sessão durante a sua real utilização.
Há a outra vantagem em relação a segurança, pois os dados trafegam criptografados.
Continuando.....
Criemos estes diretórios conforme abaixo em todas as máquinas clientes:
root@clienthost:~# mkdir -p /backup/log root@clienthost:~# chown -R backscp /backup
Abaixo o shell script sugerido para fazer as cópias de segurança nos servidores clientes:
#!/bin/sh # Script para realização de backup's completos # Por Aldemari Borges(aldemari@gmail.com» export PATH=$PATH:/bin:/usr/bin:/usr/local/bin # Definicao de data e horario DATA=`date +%a%d%m%y` HORA=`date +%Hh%Mm%Ss` # Máscara para o arquivo a ser gerado NOMESERVIDOR=portal # Diretório ou arquivo para ser 'backapeado' BACKORIGEM=/home/backscp/examples.desktop # Local remoto aonde os arquivos serão enviados(Lembre-se de criar o diretório de destino) BACKDESTINO=/home/backscp/$NOMESERVIDOR # Criação do pacote tar -zcf $NOMESERVIDOR.tar.gz $BACKORIGEM date » /home/backscp/log/$NOMESERVIDOR\-$DATA\-$HORA.log # Esta linha abaixo evita erros de manipulacao de horario no momento do backup mv $NOMESERVIDOR.tar.gz $NOMESERVIDOR\-$DATA\-$HORA.tar.gz # Copiando para o repositorio remoto scp $NOMESERVIDOR\-$DATA\-$HORA.tar.gz backscp@10.90.1.33:$BACKDESTINO # Remover arquivo local rm $NOMESERVIDOR\-$DATA\-$HORA.tar.gz
Para tanto, sugerimos a utilização do QuiXplorer:
backscp@repositoriohost:~# apt-get install apache2-php5 backscp@repositoriohost:~# cd /var/www backscp@repositoriohost:~# wget http://ufpr.dl.sourceforge.net/sourceforge/quixplorer/quixplorer_2_3_1.tar.bz2 backscp@repositoriohost:~# tar -zxvf tar -jxvf quixplorer_2_3_1.tar.bz2 backscp@repositoriohost:~# mv quixplorer_2_3_1 phpexplorer
Vamos criar um virtual host no apache para facilitar sua visualização:
backscp@repositoriohost:~# cd /etc/apache2/sites-available
Edite um arquivo e salve com o nome de phpexplorer, com o conteúdo abaixo(e suas respectivas alterações):
<VirtualHost *:80> ServerAdmin sysadm@seudomain.com.br DocumentRoot /var/www/phpexplorer ServerName phpexplorer.seudomain.com.br ServerAlias phpexplorer.seudomain.com.br ErrorLog /var/log/apache2/phpexplorer-error_log CustomLog /var/log/apache2/phpexplorer-access_log combined </VirtualHost>
Após isto, vamos inserir o novo subdomínio em nosso sistema, como abaixo:
backscp@repositoriohost:~# a2ensite phpexplorer backscp@repositoriohost:~# /etc/init.d/apache2 reload
OBS: Não equecer de fazer as modificações necessárias no servidor dns interno da sua rede.