Если вы являетесь системным администратором и отвечаете за управление серверами, то резервное копирование данных является одной из самых важных ваших задач. Таким образом, вы должны иметь достаточно знаний об инструментах резервного копирования, которые облегчат вашу задачу.
Duplicity – это бесплатная утилита резервного копирования с открытым исходным кодом и расширенной командной строкой, созданная на основе librsync и GnuPG.
Она создает цифровые, подписанные и зашифрованные тома tar для хранения на локальном или удаленном компьютере.
Duplicity поддерживает множество протоколов для подключения к файловому серверу, включая ssh/scp, rsync, ftp, DropBox, Amazon S3, Google Docs, Google Drive, локальную файловую систему, OneDrive, WebDAV и многие другие.
В этом руководстве мы покажем вам, как установить и настроить Duplicity для выполнения вручную и автоматизации резервного копирования на сервере Ubuntu 20.04.
Предпосылки
- Два сервера под управлением Ubuntu 20.04.
- На сервере Duplicity настроен статический IP-адрес 104.245.32.161, а на сервере резервного копирования – 104.245.32.194.
- Пароль root также настроен на вашем сервере.
Начало работы
Перед началом необходимо обновить пакеты до последней версии.
Вы можете обновить их все с помощью следующей команды:
apt-get update -y
apt-get install ncftp python3-paramiko python-pycryptopp lftp python3-boto python3-dev librsync-dev -y
Установка Duplicity
По умолчанию Duplicity доступна в репозитории Ubuntu 20.04.
Вы можете установить инструмент, просто выполнив следующую команду:
apt-get install duplicity -y
duplicity --version
Вы должны увидеть следующий вывод:
duplicity 0.8.12
Настройка аутентификации SSH без пароля
Затем вам нужно будет сгенерировать RSA 2048-битный зашифрованный ключ SSH и использовать его для безопасной аутентификации на удаленной системе без предоставления пароля.
Сначала создайте ключ RSA с помощью следующей команды:
ssh-keygen -t rsa -m PEM
Generating public/private rsa key pair. Enter file in which to save the key (/root/.ssh/id_rsa): Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /root/.ssh/id_rsa Your public key has been saved in /root/.ssh/id_rsa.pub The key fingerprint is: SHA256:BwKSLtXT+WHhPqhu3MIH07QEb0c5Zh/f0XolMRyQaQE root@ubuntu2004 The key's randomart image is: +---[RSA 3072]----+ | .o.. ..oE.o*++ | | o.+.o.O . + +.o| | o +.*o+ + . +.| |. . =+o.. . o .| | . =.oS . . | | o.o o | | o.+ | | .= o | | ..o | +----[SHA256]-----+
ssh-copy-id root@104.245.32.194
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/root/.ssh/id_rsa.pub" /usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed /usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys root@104.245.32.194's password: Number of key(s) added: 1 Now try logging into the machine, with: "ssh 'root@104.245.32.194'" and check to make sure that only the key(s) you wanted were added.
Создайте ключи GPG
атем вам также необходимо сгенерировать ключи GPG для шифрования данных, прежде чем мы передадим их на удаленный сервер резервного копирования.
Ключи GPG используются для обеспечения дополнительного уровня безопасности и шифрования данных, передаваемых через серверы.
Вы можете использовать ключ GPG с помощью следующей команды на сервере Duplicity:
gpg --gen-key
gpg (GnuPG) 2.2.19; Copyright (C) 2019 Free Software Foundation, Inc. This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. gpg: directory '/root/.gnupg' created gpg: keybox '/root/.gnupg/pubring.kbx' created Note: Use "gpg --full-generate-key" for a full featured key generation dialog. GnuPG needs to construct a user ID to identify your key. Real name: Hitesh Jethva Email address: xxxx@gmail.com You selected this USER-ID: "Hitesh Jethva <xxxx@gmail.com>" Change (N)ame, (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: /root/.gnupg/trustdb.gpg: trustdb created gpg: key E8A334EB747BAD6A marked as ultimately trusted gpg: directory '/root/.gnupg/openpgp-revocs.d' created gpg: revocation certificate stored as '/root/.gnupg/openpgp-revocs.d/6683A9D4720C5895BF7A7AE9E8A334EB747BAD6A.rev' public and secret key created and signed. pub rsa3072 2020-07-30 [SC] [expires: 2022-07-30] 6683A9D4720C5895BF7A7AE9E8A334EB747BAD6A uid Hitesh Jethva <xxxx@gmail.com> sub rsa3072 2020-07-30 [E] [expires: 2022-07-30]
Приведенная выше команда сгенерирует ключи GPG и сохранит их в каталоге /root/.gnupg/.
Если вы забыли свой ключ GPG, вы можете найти его с помощью следующей команды:
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 gpg: next trustdb check due at 2022-07-30 /root/.gnupg/pubring.kbx ------------------------ pub rsa3072 2020-07-30 [SC] [expires: 2022-07-30] 6683A9D4720C5895BF7A7AE9E8A334EB747BAD6A uid [ultimate] Hitesh Jethva <hitjethva@gmail.com> sub rsa3072 2020-07-30 [E] [expires: 2022-07-30]
Создайте каталог резервного копирования
Затем вам нужно будет создать каталог на сервере резервного копирования для хранения резервной копии.
Войдите на сервер резервного копирования и создайте каталог резервного копирования с помощью следующей команды:
mkdir -p /remotebackup/Duplicity/
Выполним ручное резервное копирование
На данном этапе Duplicity установлен и настроен.
Теперь давайте выполним резервное копирование на сервере Duplicity вручную.
Выполните следующую команду для резервного копирования каталога /etc на удаленный сервер резервного копирования (104.245.32.194) в каталог /remotebackup/Duplicity/:
duplicity /etc/ sftp://root@104.245.32.194//remotebackup/Duplicity/
Local and Remote metadata are synchronized, no sync needed. Last full backup date: none GnuPG passphrase for decryption: Retype passphrase for decryption to confirm: No signatures found, switching to full backup. --------------[ Backup Statistics ]-------------- StartTime 1596110093.56 (Thu Jul 30 11:54:53 2020) EndTime 1596110095.24 (Thu Jul 30 11:54:55 2020) ElapsedTime 1.67 (1.67 seconds) SourceFiles 1413 SourceFileSize 2698964 (2.57 MB) NewFiles 1413 NewFileSize 2698964 (2.57 MB) DeletedFiles 0 ChangedFiles 0 ChangedFileSize 0 (0 bytes) ChangedDeltaSize 0 (0 bytes) DeltaEntries 1413 RawDeltaSize 1857098 (1.77 MB) TotalDestinationSizeChange 493579 (482 KB) Errors 0 -------------------------------------------------
ls /remotebackup/Duplicity/
Вы должны увидеть следующий вывод:
duplicity-full.20200730T115821Z.manifest.gpg duplicity-full-signatures.20200730T115821Z.sigtar.gpg duplicity-full.20200730T115821Z.vol1.difftar.gpg
Автоматизация резервного копирования с помощью Cron
Вы также можете запланировать ежедневное или еженедельное резервное копирование, настроив задание Cron на автоматическое выполнение его через заданный интервал времени.
Во-первых, вам нужно будет создать файл парольной фразы в каталоге /root, чтобы она автоматически передавалась без интерактивной подсказки.
Вы можете создать его с помощью следующей команды:
nano /root/.passphrase
Добавьте свой пароль ключа GPG, как показано ниже:
PASSPHRASE="admin"
chmod 600 /root/.passphrase
nano /etc/cron.daily/duplicity.inc
Добавьте следующие строки:
#!/bin/sh test -x $(which duplicity) || exit 0 . /root/.passphrase export PASSPHRASE $(which duplicity) --encrypt-key 6683A9D4720C5895BF7A7AE9E8A334EB747BAD6A --exclude /var --exclude /home --exclude /swapfile --exclude /proc --exclude /sys --exclude /tmp --exclude /usr / sftp://root@104.245.32.194//remotebackup/Duplicity/
Сохраните и закройте файл, когда вы закончите.
Затем сделайте исполняемым скрипт с помощью следующей команды:
chmod +x /etc/cron.daily/duplicity.inc
Приведенный выше скрипт создаст резервную копию всего сервера, исключая некоторые папки.
Теперь протестируйте скрипт, чтобы убедиться, что все работает правильно.
/etc/cron.daily/duplicity.inc
Local and Remote metadata are synchronized, no sync needed. Last full backup left a partial set, restarting. Last full backup date: Thu Jul 30 12:06:52 2020 RESTART: The first volume failed to upload before termination. Restart is impossible...starting backup from beginning. Local and Remote metadata are synchronized, no sync needed. Last full backup date: none No signatures found, switching to full backup. --------------[ Backup Statistics ]-------------- StartTime 1596110992.57 (Thu Jul 30 12:09:52 2020) EndTime 1596111062.63 (Thu Jul 30 12:11:02 2020) ElapsedTime 70.06 (1 minute 10.06 seconds) SourceFiles 13313 SourceFileSize 777994890 (742 MB) NewFiles 13313 NewFileSize 777994890 (742 MB) DeletedFiles 0 ChangedFiles 0 ChangedFileSize 0 (0 bytes) ChangedDeltaSize 0 (0 bytes) DeltaEntries 13313 RawDeltaSize 772067520 (736 MB) TotalDestinationSizeChange 318263295 (304 MB) Errors 0 -------------------------------------------------
PASSPHRASE="admin" duplicity --encrypt-key 6683A9D4720C5895BF7A7AE9E8A334EB747BAD6A collection-status sftp://root@104.245.32.194//remotebackup/Duplicity/
Вы должны получить следующий вывод:
Last full backup date: Thu Jul 30 12:14:17 2020 Collection Status ----------------- Connecting with backend: BackendWrapper Archive dir: /root/.cache/duplicity/b2af509c9fab82d874aa492a933aaf70 Found 0 secondary backup chains. Found primary backup chain with matching signature chain: ------------------------- Chain start time: Thu Jul 30 12:14:17 2020 Chain end time: Thu Jul 30 12:14:17 2020 Number of contained backup sets: 1 Total number of contained volumes: 2 Type of backup set: Time: Num volumes: Full Thu Jul 30 12:14:17 2020 2 ------------------------- No orphaned or incomplete backup sets found.
PASSPHRASE="admin" duplicity full --encrypt-key 6683A9D4720C5895BF7A7AE9E8A334EB747BAD6A remove-all-but-n-full 3 --force sftp://root@104.245.32.194//remotebackup/Duplicity/
PASSPHRASE="admin" duplicity --encrypt-key 6683A9D4720C5895BF7A7AE9E8A334EB747BAD6A remove-all-but-n-full 2 --force sftp://root@104.245.32.194//remotebackup/Duplicity/
Восстановление резервной копии
Вы также можете легко восстановить файлы и каталоги с удаленного сервера резервного копирования.
Вы можете использовать опцию –file-to-restore для восстановления файлов и каталогов.
Перед выполнением процесса восстановления вы можете перечислить все доступные файлы и каталоги на сервере резервного копирования с помощью следующей команды:
duplicity --encrypt-key 6683A9D4720C5895BF7A7AE9E8A334EB747BAD6A list-current-files sftp://root@104.245.32.194//remotebackup/Duplicity/ | less
Local and Remote metadata are synchronized, no sync needed. Last full backup date: Thu Jul 30 12:14:17 2020 Thu Jul 30 12:04:04 2020 . Thu May 14 03:28:54 2020 bin Thu May 14 03:35:45 2020 boot Mon Apr 20 16:33:49 2020 boot/System.map-5.4.0-26-generic Wed Apr 29 13:34:16 2020 boot/System.map-5.4.0-29-generic Mon Apr 20 16:33:49 2020 boot/config-5.4.0-26-generic Wed Apr 29 13:34:16 2020 boot/config-5.4.0-29-generic Thu May 14 03:37:26 2020 boot/grub Thu May 14 03:31:36 2020 boot/grub/fonts Thu May 14 03:31:36 2020 boot/grub/fonts/unicode.pf2 Thu May 14 03:31:29 2020 boot/grub/gfxblacklist.txt Thu May 14 03:37:26 2020 boot/grub/grub.cfg Wed Jul 29 10:05:41 2020 boot/grub/grubenv Thu May 14 03:31:37 2020 boot/grub/i386-pc Thu May 14 03:31:36 2020 boot/grub/i386-pc/915resolution.mod Thu May 14 03:31:36 2020 boot/grub/i386-pc/acpi.mod Thu May 14 03:31:36 2020 boot/grub/i386-pc/adler32.mod Thu May 14 03:31:36 2020 boot/grub/i386-pc/affs.mod Thu May 14 03:31:36 2020 boot/grub/i386-pc/afs.mod Thu May 14 03:31:36 2020 boot/grub/i386-pc/ahci.mod Thu May 14 03:31:36 2020 boot/grub/i386-pc/all_video.mod Thu May 14 03:31:36 2020 boot/grub/i386-pc/aout.mod Thu May 14 03:31:36 2020 boot/grub/i386-pc/archelp.mod Thu May 14 03:31:36 2020 boot/grub/i386-pc/at_keyboard.mod Thu May 14 03:31:36 2020 boot/grub/i386-pc/ata.mod Thu May 14 03:31:36 2020 boot/grub/i386-pc/backtrace.mod Thu May 14 03:31:36 2020 boot/grub/i386-pc/bfs.mod Thu May 14 03:31:36 2020 boot/grub/i386-pc/biosdisk.mod Thu May 14 03:31:36 2020 boot/grub/i386-pc/bitmap.mod Thu May 14 03:31:36 2020 boot/grub/i386-pc/bitmap_scale.mod Thu May 14 03:31:36 2020 boot/grub/i386-pc/blocklist.mod Thu May 14 03:31:37 2020 boot/grub/i386-pc/boot.img Thu May 14 03:31:36 2020 boot/grub/i386-pc/boot.mod Thu May 14 03:31:36 2020 boot/grub/i386-pc/bsd.mod Thu May 14 03:31:35 2020 boot/grub/i386-pc/bswap_test.mod Thu May 14 03:31:36 2020 boot/grub/i386-pc/btrfs.mod
PASSPHRASE="admin" duplicity --encrypt-key 6683A9D4720C5895BF7A7AE9E8A334EB747BAD6A --file-to-restore opt sftp://root@104.245.32.194//remotebackup/Duplicity/ /opt
Local and Remote metadata are synchronized, no sync needed. Last full backup date: Thu Jul 30 12:14:17 2020
Заключение
В этом руководстве мы узнали, как выполнять резервное копирование и восстановление файлов и каталогов с помощью Duplicity на сервере Ubuntu 20.04.
Мы также узнали, как автоматически выполнять процесс резервного копирования, планируя процесс резервного копирования с помощью Cron.
Я надеюсь, что эта статья поможет вам сэкономить много времени.