Duplicity and backup

Материал из Записки на полях
Перейти к навигации Перейти к поиску

В статье мы настроим автоматическое резервное копирование с шифрованием на сторонний сервер. Помогать нам в этом будет программа Duplicity, которая есть практически во всех дистрибутивах. Хоть это и не желательно, но все действия будут производиться от имени root-а.

Ставим

yum -y install duplicity gpgme pygpgme

SSH

Для автоматического копирования резервной копии на удалённый сервер нам требуется ключ для ssh. Генерим

ssh-keygen -t rsa

И отправляем

ssh-copy-id user@remotehost

Для проверки можно залогиниться на удалённую машину ssh user@remotehost

GPG Keys

Генерим ключи для GPG, с помощью которых будут шифроваться резервные копии

gpg --gen-key

Будут задаваться вопросы по поводу типа ключей, длины этих ключей и сроке действия. Выбираем по вкусу (я сгенерил дефолтные RSA and RSA, с стандартной длиной 2048 и неограниченным сроком действия). Ну и смотрим что у нас получилось

gpg --list-keys
/root/.gnupg/pubring.gpg
------------------------
pub   2048R/098D1289 2018-09-24
uid                  your_name <1@1.com>
sub   2048R/88D0F132 2018-09-24

Для параноиков, можно экспортировать закрытый ключ (а заодно и открытый) в файл и удалить его из gpg на сервере. Экспорт открытого ключа

gpg --armor --output pubkey.txt --export 098D1289

Экспорт закрытого ключа

gpg --armor --output privkey.txt --export-secret-keys 098D1289

Импорт открытого ключа

gpg --import pubkey.txt

Импорт закрытого ключа

gpg --allow-secret-key-import --import privkey.txt

Ну и - удалить ключ

gpg --delete-secret-keys 098D1289

Немного подробнее почитать про GPG можно тут

Duplicity

Проверяем

duplicity /from_folder scp://user@remotehost:2222/to_folder

После ввода пароля от GPG ключа стартует процесс резервного копирования. В домашней директории пользователя User в каталоге to_folder (а адресация относительная, для абсолютной требуется ставить два слэша cp://user@remotehost:2222//home/user/to_folder)

ll to_folder
[user@remotehost] ~ ]$ ll -h to_folder/
total 84M
-rw------- 1 user user  569 Sep 26 14:55 duplicity-full.20180924T125357Z.manifest.gpg
-rw------- 1 user user  83M Sep 26 14:55 duplicity-full.20180924T125357Z.vol1.difftar.gpg
-rw------- 1 user user 1.3M Sep 26 14:55 duplicity-full-signatures.20180924T125357Z.sigtar.gpg

Для того, чтобы duplicity постоянно не спрашивал пароль от ключа и как то можно было автоматизировать процесс - требуется определить переменную окружения PASSPHRASE в качестве значения которой задать наш пароль.

Автоматизируем

В домашнем каталоге рута создаём файл .passphrase в который записываем

PASSPHRASE="passphrase_for_GPG"

Назначаем права

chmod 600 /root/.passphrase

Создаём архив для cron

cat /root/backup.sh
#!/bin/sh

test -x $(which duplicity) || exit 0
. /root/.passphrase

export PASSPHRASE
$(which duplicity) --encrypt-key 098D1289 --exclude /proc --exclude /sys --exclude /tmp --full-if-older-than 7d / scp://user@remotehost:2222/to_folder
unset PASSPHRASE

Опция --full-if-older-than говорит, что надо делать полный бэкап каждые 7 дней Назначаем права

chmod 700 /root/backup.sh

И добавляем в cron


https://www.zetta.io/en/help/articles-tutorials/backup-linux-duply/ https://rtfm.co.ua/gpg-primery-ispolzovaniya-dlya-shifrovaniya/