Как автоматизировать резервное копирование с использованием дублирования, используя cron с использованием шифрования gpg и бэкэнда ssh?
Вы можете использовать дублирование-автоматизировать ( 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>
и все!
Первоначальная ссылка: 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 -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 и перенастроенный постфикс для локальной доставки почты. Каждую ночь я получаю отчет о том, как выполнялись резервные копии.
Я потратил довольно много времени на определение того, как автоматизировать это и обеспечить надежное шифрование. Я надеюсь, что вы найдете это полезным.