Cómo hacer una copia de seguridad usando Duplicity en Ubuntu 20.04 | Ubuntu 20.10

Cómo hacer una copia de seguridad usando Duplicity en Ubuntu 20.04 | Ubuntu 20.10

 

Si usted es un administrador de sistemas y es responsable de administrar servidores, la copia de seguridad de los datos es una de sus tareas más importantes. Por lo que debe tener suficiente conocimiento de las herramientas de copia de seguridad que facilita su tarea.

Duplicity es una utilidad de copia de seguridad de línea de comandos avanzada, gratuita y de código abierto construida sobre librsync y GnuPG. Produce volúmenes tar cifrados, versionados y firmados digitalmente para su almacenamiento en una computadora local o remota. Duplicity admite muchos protocolos para conectarse a un servidor de archivos, incluidos ssh/scp, rsync, ftp, DropBox, Amazon S3, Google Docs, Google Drive, sistema de archivos local, OneDrive, WebDAV y muchos más.

En este tutorial, le mostraremos cómo instalar y configurar Duplicity para realizar manualmente y automatizar copias de seguridad en el servidor Ubuntu 20.04.

requisitos previos

• Dos servidores con Ubuntu 20.04.
• Se configura una dirección IP estática 104.245.32.161 en el servidor de Duplicity y 104.245.32.194 en el servidor de respaldo.
• Una contraseña de root está configurada en su servidor.

Empezando

Antes de comenzar, deberá actualizar su paquete a la última versión. Puede actualizarlos todos con el siguiente comando:

apt-get update -y

Después de actualizar todos los paquetes, también deberá instalar algunas dependencias requeridas en su servidor. Puede instalarlos todos ejecutando el siguiente comando:

apt-get install ncftp python3-paramiko python-pycryptopp lftp python3-boto python3-dev librsync-dev -y

Una vez que todos los paquetes estén instalados, puede proceder a instalar Duplicity.

Instalar Duplicidad

De forma predeterminada, Duplicity está disponible en el repositorio predeterminado de Ubuntu 20.04. Puede instalarlo simplemente ejecutando el siguiente comando:

apt-get install duplicity -y

Una vez instalado, verifique la versión instalada de Duplicity con el siguiente comando:

duplicity --version

Debería ver el siguiente resultado:

duplicity 0.8.12

Configurar contraseña SSH sin autenticación

A continuación, deberá generar una clave SSH cifrada RSA de 2048 bits y usarla para autenticarse de forma segura con el sistema remoto sin proporcionar una contraseña .

Primero, genera una clave RSA con el siguiente comando:

ssh-keygen -t rsa -m PEM

Se le pedirá que especifique la ubicación de la clave y la frase de contraseña como se muestra a continuación:

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]-----+

A continuación, copie la clave RSA generada en el servidor de respaldo remoto con el siguiente comando:

ssh-copy-id root@104.245.32.194

Se le pedirá que proporcione la contraseña del servidor remoto como se muestra a continuación:

/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.

Generar claves GPG

A continuación, también deberá generar claves GPG para cifrar los datos antes de que los transfiramos al servidor de respaldo remoto. Las claves GPG se utilizan para proporcionar una capa adicional de seguridad y encriptación de los datos transferidos a través de los servidores.

Puede usar la clave GPG con el siguiente comando en el servidor de Duplicity:

gpg --gen-key

Se le pedirá que proporcione la contraseña de la clave GPG durante el proceso de generación de claves como se muestra a continuación:

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]

El comando anterior generará las claves GPG y las guardará en el directorio /root/.gnupg/.

Si olvida su clave GPG, puede encontrarla con el siguiente comando:

gpg --list-keys

Deberías obtener el siguiente resultado:

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]

Crear directorio de respaldo

A continuación, deberá crear un directorio en el servidor de copia de seguridad para almacenar la copia de seguridad.

Inicie sesión en el servidor de respaldo y cree un directorio de respaldo con el siguiente comando:

mkdir -p /remotebackup/Duplicity/

Una vez que haya terminado, puede continuar con el siguiente paso.

Realizar copia de seguridad manual

En este punto, Duplicity está instalado y configurado. Ahora, realicemos una copia de seguridad manual en el servidor de Duplicity.

Ejecute el siguiente comando para hacer una copia de seguridad de un directorio llamado /etc en el servidor de copia de seguridad remoto (104.245.32.194) dentro del directorio /remotebackup/Duplicity/:

duplicity /etc/ sftp://root@104.245.32.194//remotebackup/Duplicity/

Deberá proporcionar la contraseña de su clave GPG para realizar la operación de copia de seguridad como se muestra a continuación:

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
-------------------------------------------------

Ahora, inicie sesión en el servidor de respaldo remoto y verifique el respaldo con el siguiente comando:

ls /remotebackup/Duplicity/

Debería ver el siguiente resultado:

duplicity-full.20200730T115821Z.manifest.gpg      duplicity-full-signatures.20200730T115821Z.sigtar.gpg
duplicity-full.20200730T115821Z.vol1.difftar.gpg

Automatice la copia de seguridad con Cron

También puede programar su copia de seguridad diaria o semanalmente configurando el trabajo de Cron para que se ejecute automáticamente en un intervalo de tiempo específico.

Primero, deberá crear un archivo de frase de contraseña en el directorio /root para pasar la frase de contraseña automáticamente sin un aviso interactivo para la paráfrasis.

Puedes crearlo con el siguiente comando:

nano /root/.passphrase

Agregue su contraseña de clave GPG como se muestra a continuación

PASSPHRASE="admin"

Guarde y cierre el archivo, luego asegúrelo con el siguiente comando:

chmod 600 /root/.passphrase

Ahora, cree un script de respaldo diario dentro del directorio /etc/cron.daily/ que se ejecutará diariamente:

nano /etc/cron.daily/duplicity.inc

Agregue las siguientes líneas:

#!/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/

Guarde y cierre el archivo cuando haya terminado. Luego, otorgue permiso de ejecución al script con el siguiente comando:

chmod +x /etc/cron.daily/duplicity.inc

La secuencia de comandos anterior realizará una copia de seguridad de un servidor raíz completo, excluyendo algunas de las carpetas.

Ahora pruebe el script para asegurarse de que todo funcione correctamente.

/etc/cron.daily/duplicity.inc

Debería ver el siguiente resultado:

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
-------------------------------------------------

Ahora puede verificar el estado de su copia de seguridad con el siguiente comando:

PASSPHRASE="admin" duplicity --encrypt-key 6683A9D4720C5895BF7A7AE9E8A334EB747BAD6A collection-status  sftp://root@104.245.32.194//remotebackup/Duplicity/

Deberías obtener el siguiente resultado:

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.

Si desea realizar una copia de seguridad completa, ejecute el siguiente comando:

PASSPHRASE="admin" duplicity full  --encrypt-key 6683A9D4720C5895BF7A7AE9E8A334EB747BAD6A remove-all-but-n-full 3 --force sftp://root@104.245.32.194//remotebackup/Duplicity/

También puede limpiar los archivos de respaldo antiguos usando la opción remove-all-but-n-full. Por ejemplo, si desea eliminar todos los archivos de copia de seguridad antiguos no deseados y conservar solo 2 copias de seguridad y sus correspondientes copias de seguridad incrementales, ejecute el siguiente comando:

PASSPHRASE="admin" duplicity --encrypt-key 6683A9D4720C5895BF7A7AE9E8A334EB747BAD6A remove-all-but-n-full 2 --force  sftp://root@104.245.32.194//remotebackup/Duplicity/

Restaurar copia de seguridad

También puede restaurar fácilmente sus archivos y directorios desde el servidor de respaldo remoto. Puede usar la opción –file-to-restore para restaurar archivos y directorios.

Antes de realizar el proceso de restauración, puede enumerar todos los archivos y directorios disponibles en el servidor de copia de seguridad con el siguiente comando:

duplicity --encrypt-key 6683A9D4720C5895BF7A7AE9E8A334EB747BAD6A list-current-files  sftp://root@104.245.32.194//remotebackup/Duplicity/ | less

Debería ver el siguiente resultado:

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

Ahora, restaure el directorio llamado «opt» del servidor de respaldo al directorio /opt ejecutando el siguiente comando:

PASSPHRASE="admin" duplicity --encrypt-key 6683A9D4720C5895BF7A7AE9E8A334EB747BAD6A --file-to-restore opt sftp://root@104.245.32.194//remotebackup/Duplicity/ /opt

Si el proceso de restauración se completó con éxito, debería ver el siguiente resultado:

Local and Remote metadata are synchronized, no sync needed.
Last full backup date: Thu Jul 30 12:14:17 2020

Conclusión

En el tutorial anterior, aprendimos cómo hacer una copia de seguridad y restaurar archivos y directorios con Duplicity en el servidor Ubuntu 20.04. También aprendimos cómo realizar el proceso de copia de seguridad automáticamente programando un proceso de copia de seguridad con Cron. Espero que este artículo te ayude a ahorrar mucho tiempo.

Deja un comentario

Tu dirección de correo electrónico no será publicada.

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.