При создании домашних резервных копий одним из главных вопросов становится их хранение. Резервные необходимо хранить на другой машине и лучше всего за пределами домашней сети. Наиболее доступным решением будет использование облачных хранилищ, но у каждого провайдера может быть своё API для доступа к хранилищу, к которому нужно написать или найти свой адаптер. Но с помощью утилиты rclone можно одновременно делать резервные копии в различные облачные хранилища
Для этого понадобится всего несколько программ:
- tar – для создания архива
- gpg – для шифрования архива
- rclone – для сохранения архива в облачном хранилище
tar и gpg входят в стандартные пакеты линукс дистрибутивов. rclone необходимо установить согласно документации и самый простой способ – воспользоваться автоустановщиком
sudo -v ; curl https://rclone.org/install.sh | sudo bash
Создание ключа GPG
По-умолчанию GPG уже идет у большинства дистрибутивов. При отсутствии можно установить с помощью комады
sudo apt install gnupg
ВАЖНО!!! Не теряйте ключи, иначе будет не возможна расшифровка резервных копий. После генерации ключей экспортируйте их и сохраните в надежном месте, а лучше нескольких. Экспортируемые ключи имеют не большой размер, на худой конец можно даже распечатать
Для шифрования архивов необходимо сгенерировать GPG ключ
gpg --full-gen-key
Выбираем все значения по-умолчанию. В качестве идентификатор пользователя достаточно ввести E-Mail, не обязательно реальный, в примере будем использовать backup@example.com. Пароль не обязательно задавать
gpg (GnuPG) 2.4.4; Copyright (C) 2024 g10 Code GmbH
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
Please select what kind of key you want:
(1) RSA and RSA
(2) DSA and Elgamal
(3) DSA (sign only)
(4) RSA (sign only)
(9) ECC (sign and encrypt) *default*
(10) ECC (sign only)
(14) Existing key from card
Your selection?
Please select which elliptic curve you want:
(1) Curve 25519 *default*
(4) NIST P-384
(6) Brainpool P-256
Your selection?
Please specify how long the key should be valid.
0 = key does not expire
<n> = key expires in n days
<n>w = key expires in n weeks
<n>m = key expires in n months
<n>y = key expires in n years
Key is valid for? (0)
Key does not expire at all
Is this correct? (y/N) y
GnuPG needs to construct a user ID to identify your key.
Real name:
Email address: backup@example.com
Comment:
You selected this USER-ID:
"backup@example.com"
Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? o
We need to generate a lot of random bytes. It is a good idea to perform
some other action (type on the keyboard, move the mouse, utilize the
disks) during the prime generation; this gives the random number
generator a better chance to gain enough entropy.
We need to generate a lot of random bytes. It is a good idea to perform
some other action (type on the keyboard, move the mouse, utilize the
disks) during the prime generation; this gives the random number
generator a better chance to gain enough entropy.
gpg: revocation certificate stored as '/home/imaroz/.gnupg/openpgp-revocs.d/79B02D3497EBA5E1D68544AAE52F670590BD64DB.rev'
public and secret key created and signed.
pub ed25519 2025-01-21 [SC]
79B02D3497EBA5E1D68544AAE52F670590BD64DB
uid backup@example.com
sub cv25519 2025-01-21 [E]
Проверим созданные ключи
gpg --list-keys
gpg: checking the trustdb
gpg: marginals needed: 3 completes needed: 1 trust model: pgp
gpg: depth: 0 valid: 1 signed: 0 trust: 0-, 0q, 0n, 0m, 0f, 1u
/home/imaroz/.gnupg/pubring.kbx
-------------------------------
pub ed25519 2025-01-21 [SC]
79B02D3497EBA5E1D68544AAE52F670590BD64DB
uid [ultimate] backup@example.com
sub cv25519 2025-01-21 [E]
После генерации необходимо экспортировать ключи. Экспорт секретного ключа
gpg --export-secret-key --export-options backup --armor backup@example.com > 'backup@example.com.gpg'
# или с указанием имени файла в опциях
gpg --export-secret-key --export-options backup --armor 'backup@example.com.gpg' -a backup@example.com
-a (или –armor) – выводить в виде текста ASCII. По умолчанию вывод производится в двоичном формате OpenPGP
Если резервные копии будут создаваться на других машинах, то полезно экспортировать публичный ключ и в дальнейшем для шифрования использовать его.
gpg --export --export-options backup --armor 'backup@example.com.gpg.pub' -a backup@example.com
После того как скопировали ключ (публичный или приватный) на сервер, его необходимо импортировать
gpg --import --import-options restore backup@example.com.gpg.pub
и установить уровень абсолютного доверия (5 = I trust ultimately)
gpg --edit-key backup@example.com trust
gpg (GnuPG) 2.4.4; Copyright (C) 2024 g10 Code GmbH
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
pub ed25519/E52F670590BD64DB
created: 2025-01-21 expires: never usage: SC
trust: unknown validity: unknown
sub cv25519/F27C6CF8D26F4BA7
created: 2025-01-21 expires: never usage: E
[ unknown] (1). backup@example.com
pub ed25519/E52F670590BD64DB
created: 2025-01-21 expires: never usage: SC
trust: unknown validity: unknown
sub cv25519/F27C6CF8D26F4BA7
created: 2025-01-21 expires: never usage: E
[ unknown] (1). backup@example.com
Please decide how far you trust this user to correctly verify other users' keys
(by looking at passports, checking fingerprints from different sources, etc.)
1 = I don't know or won't say
2 = I do NOT trust
3 = I trust marginally
4 = I trust fully
5 = I trust ultimately
m = back to the main menu
Your decision? 5
Do you really want to set this key to ultimate trust? (y/N) y
pub ed25519/E52F670590BD64DB
created: 2025-01-21 expires: never usage: SC
trust: ultimate validity: unknown
sub cv25519/F27C6CF8D26F4BA7
created: 2025-01-21 expires: never usage: E
[ unknown] (1). backup@example.com
Please note that the shown key validity is not necessarily correct
unless you restart the program.
Или в одну строку
echo -e "5\ny\n" | gpg --command-fd 0 --expert --edit-key backup@example.com trust
Настройка подключений rclone
По умолчанию rclone хранит настройки в домашней директории пользователя, но местоположение можно указать параметром –config. Настройки доступа для резервного копирования лучше хранить в отдельном файле и не домашней директории, например, в /etc/rclone/backup.conf. Тогда для настройки подключения необходимо вызывать команды с ключом –config
sudo rclone --config /etc/rclone/backup.conf config
И далее следуем по меню для создания необходимых подключений. Допустим, что создали три подключения с кодовыми названиями:
- ftp – некий ftp сервер
- dropbox – облачное хранилище Dropbox
- yandex – Яндекс.Диск. Как подключить Яндекс.Диск по протоколу WebDAV описана в заметке Подключение Yandex.Disk с помощью rclone через WebDAV
Создание резервной копии
Основной сценарий создания резервной копии: создать архивы на той же машине, а затем скопировать в резервное хранилища. Но с помощью rclone можно одновременно копировать архивы в несколько удаленных хранилищ, не создавая временных файлов на локальной машине с помощью команды rcat
Для создания резерных копий одной директории, например, /var/www необходимо выполнить всего одну команду
tar -czf - -C /var/www "." | \
gpg -e -r backup@example.com | \
tee \
>(rclone --config /etc/rclone/backup.conf rcat "ftp:backup/var/www.tar.gz.gpg" --size-only) \
>(rclone --config /etc/rclone/backup.conf rcat "yandex:backup/var/www.tar.gz.gpg") \
>(rclone --config /etc/rclone/backup.conf rcat "dropbox:backup/var/www.tar.gz.gpg") \
&>/dev/null
Последовательно выполняются следующие действия
- Архивируется директория /var/www и результат отправляется в стандартный поток
- Поток шифруется и подписывается ключом backup@example.com
- Команда tee передает одновременно в три потока в rclone
Как следует из команды создания резервной копии, количество внешних хранилищ может быть любым, нужно только добавлять соответствующую строку с целевым хранилищем команде tee
Если не нужно шифрование, то можно опустить шаг с вызовов gpg
Восстановление из резервной копии
Перейдите в директорию, в которой хотите восстановить резервную копию, в примере выше: /var/www и восстановите файлы из одного из облачных хранилищ
cd /var/www
rclone --config /etc/rclone/backup.conf cat "ftp:backup/var/www.tar.gz.gpg" | gpg -d | tar -xzf -
Обязательным условием должно быть наличие приватного ключа на сервере