Logotipo Dicas-L, por Ricardo Burile

Busca

Visite também: UnderLinux ·  VivaOLinux ·  LinuxSecurity ·  NoticiasLinux ·  BR-Linux ·  SoftwareLivre.org ·  [mais]   
 

Você está aqui: Home  → Arquivo Dicas-L

 

Aprenda Inglês em Casa

Assine a Lista Dicas-L

Receba diariamente por email as dicas
de informática publicadas neste site
Para se descadastrar, clique aqui.

Sistema simples de Backup via Scp(secure copy)

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.

Objetivos desta solução

  • ser simples de configurar
  • utilizar o protocolo scp(cópia remota criptografada)
  • utilizar o empacotador TAR e o compressor GZIP
  • haver mascaramento da data e hora que o backup foi gerado no arquivo gerado(.tar.gz)
  • Os Backups serão gerados em disco rígido inicialmente, mas podem ser gravados em outra mídia

Objetivos futuros(help)

  • enviar relatório de erros e acertos de backup's via email
  • haver alguma interface web(php, python, ruby ou perl) que faça a interação de definições das variáveis
  • Haver interface web(php, python, ruby ou perl) que gere relatórios dos arquivos gerados de acertos e erros
  • Haver algum recurso de reconhecimento de não crescimento de tamanho de determinado arquivo de backup
  • Enviar email quando o servidor de backup atingir 90% de utilização de seu espaço em disco
  • Haver possibilidade de gravação em Fitas DAT

ARQUITETURA

  • Cada cliente deverá possuir o shell script que deverá rodar agendado via cron
  • Cada cliente será encarregado de enviar o arquivo 'backupeado' para o serividor principal(repositório)
  • O servidor deverá adicionar em sua lista de autorização de chaves públicas, cada servidor cliente

Vamos ao passos:

1. Criação do usuário que fará a tarefa dos backups:

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)

2. Criação das chaves assimétricas:

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:

  • Chave privada(nesta não se mexe): ~.ssh/id_rsa
  • Chave pública: ~.ssh/id_rsa.pub

3. Enviar a chave pública para o servidor que será o repositório

  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

4. Visualizando os arquivos pela WEB

Para tanto, sugerimos a utilização do QuiXplorer:

4.1. Procedimentos:

  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

4.2. Configuração do quiXplorer

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.

Veja a relação completa dos artigos de Aldemari Borges

Stumble Upon Digg This Del.icio.us Twitter Recomendar este artigo a um amigo Entre em contato Formato PDF
Newsfeed RSS
Formato para impressão
StumbleUpon Digg Del.icio.us Twitter Recomendar Contato PDF RSS Imprimir

Referências Adicionais

Referências adicionais sobre os assuntos abordados neste site podem ser encontradas em nossa Bibliografia.

Avalie esta dica

  • Currently 3.35/5
  • 1
  • 2
  • 3
  • 4
  • 5

Avaliação: 3.3 /5 (310 votos)

Opinião dos Leitores

Backup Online Ilimitado
31 Jul 2009, 10:49
Pessoal,

Achei um serviço que tem um pouco a ver com backup, mas esse é para usuários domésticos...

http://www.pcseguro.com.br/backup/backup_online_ilimitado.html

Acho que em breve eles devem lançar algo para empresas...

Iria ajudar muito...

Abraços,
Marcus
Claudio Alvim Lessa
09 Jul 2009, 16:11
parabens pelo artigo, mas eu gostaria de dar uma sugestão para este script de copia:

- depois de copiar via scp testar o código de retorno se está ok ($? = 0) caso contrário poderia tentar mais duas vezes caso persista o erro enviar uma e-mail de erro e abortar o processo (exit 1).

[]s
Claudio
Aldemari Borges
09 Jul 2009, 09:55
Masoli,

utilize o comando 'time' antes do comando de compactação. Depois utilize algum comando que trabalhe com strings para pegar a informação desejada como o cut ou xargs.
iolo
04 Jul 2009, 12:29
Aldemari, seu script é semenhante ao que eu uso pra fazer bkp dos arquivos de configuração dos meus clientes, parabens pelo artigo.

[]'s
Eduardo Lopes
19 Jun 2009, 17:23
Existe o BAckupPC, que faz tudo isso ...
Mosoli
19 Jun 2009, 10:25
Olá

Tenho uma rotina de backup aqui na empresa que funciona perfeitamente. Faz o a copia dos aquivos, e ao termino da copia me envia um email "BACKUP CONCLUIDO", Só que esse email que eu recebo apos o termino do backup me envia uma pagina em HTML que eu mesmo fiz. O que eu gostaria é de enviar um arquivo.log do meu backup contendo: data hora tempo gasto etc... para enviar esse arquivo eu ja tenho a solução pois vol usar o mesmo procedimento que uso para enviar a pagina html. Só que a minha duvida é com relação a como colocar DATA HORA e TEMPO GASTO NO BACKUP.

Vou descrever parte do meu script (só a parte de copia e compactacao):
###########################################################
#!/bin/bash
### BACKUP SERVER REDE LINUX SCRIPTS ###
### ADMINISTRADOR REDE ANDRE G. MOSOLI ###
### MSN COMERCIAL "MOSOLI.COMERCIAL@HOTMAIL.COM ###
### ROTINA BACKUP PARA ANALISE ###

# MONTA UNIDADE DE REDE
mount -t cifs //192.168.100.200/bkp /usr/local/backup -o username=backup,password=backup

##### DEFINE VARIAVEIS 5 SCRIPTS ####
DIR_ORIG5=/home/scripts/
DIR_DEST5=/usr/local/backup/scripts/
BKP_NAME5=scripts-`date +%d-%m-%Y-%H%M`

tar -cjf ${DIR_DEST5}${BKP_NAME5}"tar.bz2" ${DIR_ORIG5}


# DESMONTA UNIDADE DE REDE
umount -t cifs //192.168.100.200/bkp /usr/local/backup/
###########################################################

Veja bem na linhda: BKP_NAME5=scripts-`date +%d-%m-%Y-%H%M`
estou definindo o nome do arquivo de backup e da data para o nome do arquivo tar.

O que eu gostaria é de definir outra variavel que use o #time para dizer quanto tempo foi gasto com a rotina de backup.

Por exemplo1 #time ./backup.sh

Só que nesse exemplo acima a saida do time sai na tela, então eu teria que fazer o seguinte:
exemplo2 #time ./backup.sh >> backup.log

Como demonstrei no exemplo2 eu direcionei (se eu estiver errado me corrijam) a saida do comando time para o backup.log só que ainda sim a saida do comando time aparece na tela e nao é direcionada para o backup.log. Entao gostaria de saber como posso fazer essa saida e se é possivel isso.

msn a disposicao
mosoli.comercial@hotmail.com

Obrigado!
*Nome:
Email:
Me notifique sobre novos comentários nessa página
Oculte meu email
*Texto:
 
  Para publicar seu comentário, digite o código contido na imagem acima
 


Powered by Scriptsmill Comments Script


Encontre imóveis, apartamentos e casas a venda no Imobilien
Saiba mais

Aprenda inglês em casa
Curso estruturado com o que existe de melhor e mais rápido em estratégias e técnicas de aprendizado para adultos.
Conheça as aulas experimentais.