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

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

2 ответа

Фон

Оригинальная ссылка: http://peterpetrakis.blogspot.com/2013/06/automating-and-encrypting-duplicity.html

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

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

Постоянные необходимые переменные среды

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

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

 cat> ~ /.backenvrc << EOF
# используется скриптом резервного копирования crontab
export SSH_AGENT_PID=$SSH_AGENT_PID
экспорт SSH_AUTH_SOCK=$SSH_AUTH_SOCK
экспорт GPG_AGENT_INFO=$GPG_AGENT_INFO
экспортировать GPGKEY=XXX-insert-your-gpg-key-here-XXX
EOF

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

Настройка Crontab

# crontab -l
# mh dom mon dow команда
MAILTO=ppetraki@ локальный
BACKUP=/ дом /ppetraki/Documents/System/ Резервное копирование
#
0 0  * * *      /usr/bin/crontab -l  > $BACKUP/crontab-backup
0 0  * * *      /usr/bin/dpkg --get-selections > $BACKUP/instal-software
0 0  * * *      /usr/local/bin/ppetraki-backup.sh inc
0 0  * * Пт /usr/local/bin/ppetraki-backup.sh полный

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

1) резервное копирование моих закладок из Chrome и Firefox

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

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

Скрипт драйвера

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

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

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

#! / Bin / Баш

экспорт PATH=$PATH:/usr/local/bin
Действие =$1

USER=XXX
export HOME=/home/$USER

источник $HOME/.backenvrc

эхо "проверка среды"
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]; затем
  эхо "требует действий!"
  выход 1
фи

PASSPHRASE экспорт =

[-z $ PASSPHRASE] && выход 1

эхо "начало"

для настройки в local_backup remote_backup
делать
  horcrux clean   $config
  horcrux $action $config
сделанный

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

У Horcrux есть понятие профилей, которое устраняет всю сложность управления двойным интерфейсом командной строки. Вот пример профиля.

cat /home/ppetraki/.horcrux/local_backup-config
destination_path = "Rsync: //192.168.1.XXX/backups/personal"
 cat ~ /.horcrux / local_backup-exclude
- / home / ппетраки / песочница
- / home / ппетраки / жучки
- / home / ppetraki / Загрузки
- / home / ппетраки / видео
- /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] боль *

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

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

кот ~/.horcrux/horcrux.conf 
source="/home/ppetraki/"          # Обеспечить конечный слеш
encrypt_key=XXXXXX     # Идентификатор открытого ключа для шифрования резервных копий с
sign_key='-'             # Идентификатор ключа для подписи резервных копий (оставьте как '-', чтобы не подписывать)

use_agent = false # Использовать gpg-agent?
remove_n=3               # Количество полных наборов файлов для удаления
verbosity=5              # Записывает все изменения файла (см. справочную страницу duplicity)
vol_size=25              # Разделить резервную копию на тома объемом 25 МБ
full_if_old=30D         # Вызвать "полную" операцию для выполнения полной
                         # резервное копирование, если оно старше 360 дней
backup_basename='backup' # Имя каталога для локальных резервных копий (т. е. место назначения
                         # /Volumes/my_drive/backup/ или /media/my_drive/backup/)
dup_params='- use-agent' # Параметры для передачи в Duplicity

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

 $ horcrux inc local_backup 

мониторинг

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

Заключение

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

Вы можете использовать duplicity-automate ( 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>

и это все!

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