Automatizando backups de duplicidade usando o cron

6

Como eu automatizo backups de duplicidade usando o cron usando criptografia gpg e o backend ssh?

    
por ppetraki 18.06.2013 / 17:43

2 respostas

6

Antecedentes

Referência original: link

Tendo sofrido perda de dados no passado e hackeado no armazenamento sugere que É uma boa ideia ter backups regulares. Eu queria redundância no caso do meu servidor local falhou e eu queria criptografar meus backups usando uma senha tecla gpg protegida.

A solução atual usa uma senha mantida em texto simples fora do caminho de backup. Eu pretendo investigar movendo a chave gpg para um cartão inteligente e usando uma chave de alfinete para desbloqueá-lo. Se alguém tiver alguma solução adicional por favor, descreva-os em detalhes.

Persistindo variáveis ambientais necessárias

Executar qualquer coisa do cron desconecta-o do seu ambiente atual, você perde todas as variáveis que descrevem coisas como o seu agente-gpg ssh, coisas que você precisa começar a se comunicar com o servidor remoto.

Eu tomei uma abordagem simples, no meu ~ .bashrc eu criei o seguinte.

cat > ~/.backenvrc << EOF
# used by crontab backup script
export SSH_AGENT_PID=$SSH_AGENT_PID
export SSH_AUTH_SOCK=$SSH_AUTH_SOCK
export GPG_AGENT_INFO=$GPG_AGENT_INFO
export GPGKEY=XXX-insert-your-gpg-key-here-XXX
EOF

e simplesmente fonte isto do script de backup referenciado no meu crontab, Eu apenas preciso apenas fazer o login uma vez para preencher este arquivo.

Configurando o Crontab

# crontab -l
# m h  dom mon dow   command
MAILTO=ppetraki@localhost
BACKUP=/home/ppetraki/Documents/System/Backup
#
0 0  * * *      /usr/bin/crontab -l  > $BACKUP/crontab-backup
0 0  * * *      /usr/bin/dpkg --get-selections > $BACKUP/installed-software
0 0  * * *      /usr/local/bin/ppetraki-backup.sh inc
0 0  * * Fri    /usr/local/bin/ppetraki-backup.sh full

Note que também estou fazendo o backup do meu crontab e da minha lista de softwares instalados, Eventualmente eu vou mudar isso para outro script que também faz coisas como

1) faça backup dos meus favoritos do chrome e do firefox

2) correio de backup em formato não-binário

O formato cron atual executa um backup incremental a cada noite e um backup completo toda sexta-feira.

script de driver

Isto envolve a invocação da duplicidade e adquire o necessário variáveis. Duplicidade em si pode ser peludo com todos os switches de linha de comando e ainda mais um fardo se você tiver vários alvos. Tenho backups redundantes, primeiro para um servidor local e para um serviço remoto fornecido pelo rsync.net (excelente cliente Apoio, suporte!). Eu encontrei horcrux para ser um invólucro de duplicidade maravilhoso, leve, para atender às minhas necessidades.

O script do driver, que é externo ao meu caminho de backup, também contém minha senha GPG para criptografar meus backups. Eventualmente, gostaria de mudar para um sistema de cartão inteligente [ilustrado aqui] ( link )

[/ usr / local / bin / ppetraki-backup.sh]

#!/bin/bash

export PATH=$PATH:/usr/local/bin
action=

export USER=XXX
export HOME=/home/$USER

source $HOME/.backenvrc

echo "verifying environment"
echo "gpg-agent: ${GPG_AGENT_INFO}"
echo "gpg-key:   ${GPGKEY}"
echo "ssh-agent-pid:   ${SSH_AGENT_PID}"
echo "ssh-auth-sock:   ${SSH_AUTH_SOCK}"

if [ -z $action ]; then
  echo "requires an action!"
  exit 1
fi

export PASSPHRASE=

[ -z $PASSPHRASE ] && exit 1

echo "begin"

for config in local_backup remote_backup
do
  horcrux clean   $config
  horcrux $action $config
done

Usando o horcrux para lidar com a duplicidade

O Horcrux tem a noção de perfis que eliminam toda a complexidade do gerenciamento a duplicidade CLI. Aqui está um exemplo de um perfil.

cat /home/ppetraki/.horcrux/local_backup-config
destination_path="rsync://192.168.1.XXX/backups/personal"
 cat ~/.horcrux/local_backup-exclude
- /home/ppetraki/Sandbox
- /home/ppetraki/Bugs
- /home/ppetraki/Downloads
- /home/ppetraki/Videos
- /home/ppetraki/.xsession-errors
- /home/ppetraki/.thumbnails
- /home/ppetraki/.local
- /home/ppetraki/.gvfs
- /home/ppetraki/.systemtap
- /home/ppetraki/.adobe/Flash_Player/AssetCache
- /home/ppetraki/.thunderbird
- /home/ppetraki/.mozilla
- /home/ppetraki/.config/google-googletalkplugin
- /home/ppetraki/.config/google-chrome
- /home/ppetraki/.cache
- /home/ppetraki/**[cC]ache*

Eu achei problemático fazer backup de apenas subdiretórios de coisas como o mozilla e google-chrome, em vez disso, vou escrever um script adicional para escolher esses arquivos para backup.

O arquivo de configuração horcrux principal

cat ~/.horcrux/horcrux.conf 
source="/home/ppetraki/"          # Ensure trailing slash
encrypt_key=XXXXXX     # Public key ID to encrypt backups with
sign_key='-'             # Key ID to sign backups with (leave as '-' for no signing)

use_agent=false          # Use gpg-agent?
remove_n=3               # Number of full filesets to remove
verbosity=5              # Logs all the file changes (see duplicity man page)
vol_size=25              # Split the backup into 25MB volumes
full_if_old=30D         # Cause 'full' operation to perform a full
                         # backup if older than 360 days
backup_basename='backup' # Directory name for local backups (i.e., destination
                         # /Volumes/my_drive/backup/ or /media/my_drive/backup/)
dup_params='--use-agent' # Parameters to pass to Duplicity

Isso é ótimo, pois reduz a invocação de backup para isso:

 $ horcrux inc local_backup 

Monitoramento

Eu defini MAILTO no meu crontab e também instalei o mutt e reconfigurei postfix para entrega de correio local. Toda noite recebo um relatório de progresso sobre como os backups foram executados.

Conclusão

Eu passei um bom tempo determinando como automatizar isso e fornecer criptografia strong. Espero que você ache isso útil.

    
por ppetraki 18.06.2013 / 17:43
0

Você pode usar o duplicity-automate ( link ).

Ele suporta uma sintaxe XML agradável e possui alguns manipuladores para fazer despejos de db do MySQL / PostgreSQL.

Basta definir dois arquivos como:

<?xml version="1.0"?>
<duplicity-automate>
 <backups>
   <backup type="dir">
     <passphrase>abcdef</passphrase>
     <remote-name>home</remote-name>
     <local-path>/home</local-path>
     <expiry-period>1Y</expiry-period>
   </backup>

   <backup type="dir">
     <passphrase>qwerty</passphrase>
     <remote-name>config</remote-name>
     <local-path>/etc</local-path>
     <expiry-period>1Y</expiry-period>
   </backup>
 </backups>
</duplicity-automate>

e

<?xml version="1.0"?>
<duplicity-automate>
 <servers>
   <server>
     <protocol>ftp</protocol>
     <username>john</username>
     <hostname>example.com</hostname>
     <password>1234</password>
     <path>mydirectory/backups</path>
   </server>
 </servers>
</duplicity-automate>

e pronto!

    
por mspanc 05.02.2014 / 12:25