Автоматизация резервного копирования дубликатов с помощью cron

Как автоматизировать резервное копирование с использованием дублирования, используя cron с использованием шифрования gpg и бэкэнда ssh?

6
задан 18 June 2013 в 19:43

2 ответа

Вы можете использовать дублирование-автоматизировать ( http://duplicity-auto.sf.net/ ).

Он поддерживает красивый синтаксис XML и имеет некоторые обработчики для создания дампов MySQL / PostgreSQL.

Просто определите два файла, например:

<?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>

и

<?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>

и все!

0
ответ дан 18 June 2013 в 19:43

Справочная информация

Первоначальная ссылка: http://peterpetrakis.blogspot.com/2013/06/automating-and-encrypting-duplicity.html

Пострадала Потеря данных в прошлом и взлом хранилища позволяют предположить, что рекомендуется регулярно делать резервные копии. Я хотел избыточности на случай, если мой локальный сервер вышел из строя, и я хотел зашифровать свои резервные копии с помощью защищенного паролем ключа gpg.

В текущем решении используется фраза-пароль, хранящаяся в виде простого текста вне пути резервного копирования. Я планирую изучить вопрос о перемещении ключа gpg на смарт-карту и использовании ключа для разблокировки. Если у кого-то есть какие-либо дополнительные решения, пожалуйста, опишите их подробно.

Сохранение необходимых переменных среды

Запуск чего-либо из cron отсоединяет его от вашей текущей среды, вы теряете все переменные, описывающие такие вещи, как ваш ssh-agent gpg-agent, вещи, которые вы должны начать связаться с удаленным сервером.

Я выбрал простой подход, в моем ~ .bashrc я создал следующее.

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

и просто получить его из скрипта резервного копирования, на который есть ссылка в моем файле crontab, мне просто нужно войти в систему только один раз, чтобы заполнить этот файл.

Настройка 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

Обратите внимание, что я также создаю резервную копию своего crontab и списка установленных программ, в конце концов я перенесу это в другой сценарий, который также выполняет такие действия, как

] 1) резервное копирование моих закладок из chrome и firefox

2) резервное копирование почты в недвоичном формате

Текущий формат cron выполняет инкрементное резервное копирование каждую ночь и полное резервное копирование каждую пятницу. [ 1126]

Сценарий драйвера

Это оборачивает вызов двуличия и получает необходимые переменные среды. Сама двойственность может быть пугающей со всеми переключателями командной строки и даже более обременительной, если у вас несколько целей. У меня есть резервные копии, сначала на локальный сервер и на удаленный сервис, предоставляемый rsync.net (отличная поддержка клиентов!). Я нашел хоркрукс прекрасной, легкой оберткой для двуличности, отвечающей моим потребностям.

Сценарий драйвера, который является внешним по отношению к моему пути резервного копирования, также содержит мою парольную фразу GPG для шифрования моих резервных копий. В конце концов я хочу перейти на систему, управляемую смарт-картами [показано здесь] ( http://blog.josefsson.org/2011/10/11/unattended-ssh-with-smartcard/ )

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

#!/bin/bash

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

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

Использование хоркрукса для борьбы с двуличностью

У Хоркрукса есть понятие о профилях, которое устраняет всю сложность управления Двойственность CLI. Вот пример профиля.

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*

Мне было сложно создавать резервные копии только подкаталогов таких вещей, как mozilla и google-chrome, вместо этого я напишу дополнительный скрипт, чтобы вишня выбирала эти файлы для резервного копирования.

Основной конфигурационный файл horcrux

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

Это здорово, так как сводит резервный вызов к следующему:

 $ horcrux inc local_backup 

Мониторинг

Я определил MAILTO в своем crontab, а также установил mutt и перенастроенный постфикс для локальной доставки почты. Каждую ночь я получаю отчет о том, как выполнялись резервные копии.

Заключение

Я потратил довольно много времени на определение того, как автоматизировать это и обеспечить надежное шифрование. Я надеюсь, что вы найдете это полезным.

0
ответ дан 18 June 2013 в 19:43

Другие вопросы по тегам:

Похожие вопросы: