GNU/Linux >> Tutoriales Linux >  >> Ubuntu

Cómo hacer una copia de seguridad usando Duplicity en Ubuntu 16.04

Duplicity es una aplicación de software que proporciona volúmenes de copia de seguridad en formato tar cifrados, firmados digitalmente y versionados que se pueden cargar en un servidor de archivos remoto o local. Es compatible con todas las principales distribuciones de Linux como Ubuntu, Linux Mint, Debian, Fedora y muchas más. Duplicity admite la sincronización de archivos de forma local o remota entre sistemas de archivos o servidores mediante SSH/SCP, Rsync, FTP, WebDAV, etc.

En este tutorial, explicaré cómo configurar la duplicidad y usarla para automatizar de forma segura las copias de seguridad en su servidor Ubuntu.

Requisitos previos

Necesitamos instalar todos los paquetes predeterminados para Ubuntu desde los repositorios.

$apt-get update
$apt-get install ncftp python-paramiko python-pycryptopp lftp python-boto python-dev librsync-dev

Instalar Duplicidad

Podemos instalar duplicity desde los paquetes del repositorio, simplemente ejecutando este comando.

$ apt install duplicity

Confirmemos la versión de duplicidad después de la instalación.

$ duplicity -V
duplicity 0.7.06

Crear claves SSH y GPG

A continuación, necesitaremos usar claves SSH para autenticarnos de forma segura con el sistema remoto sin tener que proporcionar una contraseña. También usamos claves GPG para cifrar los datos antes de transferirlos a la ubicación de la copia de seguridad. Estas claves proporcionan una interacción segura entre los servidores.

Generemos una clave SSH cifrada RSA de 2048 bits de nuestro usuario raíz para permitir inicios de sesión sin contraseña en la máquina de copia de seguridad.

$ ssh-keygen -t rsa
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:gxdDFAjm6AUSi7LzczlDE1orygCzplmjQCqBFkxJ8Dc root@duplicity-01
The key's randomart image is:
+---[RSA 2048]----+
|O=o o. o+. |
|o*.= .. |
|Ooo E o |
|** = + . o |
|O.* + . S |
|BB + o . . |
|=.o = |
| o o |
| |
+----[SHA256]-----+

Ahora copiamos esta clave RSA a nuestra ubicación de copia de seguridad remota.

$ssh-copy-id [email protected]
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/root/.ssh/id_rsa.pub"
The authenticity of host '45.55.165.191 (45.55.165.191)' can't be established.
ECDSA key fingerprint is SHA256:XhFoQ3/mIsjGH7RfMwH6m0MHbj1B1kR4Sug5vfTQLdU.
Are you sure you want to continue connecting (yes/no)? yes
/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
[email protected]'s password:

Number of key(s) added: 1

Now try logging into the machine, with: "ssh '[email protected]'"
and check to make sure that only the key(s) you wanted were added.

Por lo tanto, podemos acceder al servidor de respaldo remoto sin proporcionar contraseñas del host. Necesitamos crear una ubicación de destino de copia de seguridad para guardar nuestras copias de seguridad. Creé una carpeta Duplicity en mi servidor de respaldo remoto.

$mkdir -p remotebackup/Duplicity

Nuestro siguiente paso es crear las claves GPG. Las claves GPG se utilizan para mayor seguridad y encriptación de los datos transferidos a través de los servidores. Créalo simplemente ejecutando este comando a continuación:

$gpg --gen-key

Este comando creará las claves GPG y las guardará en la carpeta /root/.gnupg/. Esta generación de claves es interactiva y necesitamos seleccionar y responder a varias preguntas durante el proceso.

$ gpg --gen-key
gpg (GnuPG) 1.4.20; Copyright (C) 2015 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.

Please select what kind of key you want:
(1) RSA and RSA (default)
(2) DSA and Elgamal
(3) DSA (sign only)
(4) RSA (sign only)
Your selection?
RSA keys may be between 1024 and 4096 bits long.
What keysize do you want? (2048)
Requested keysize is 2048 bits
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

You need a user ID to identify your key; the software constructs the user ID
from the Real Name, Comment and Email Address in this form:
"Heinrich Heine (Der Dichter) <[email protected]>"

Real name: Saheetha
Email address: [email protected]
Comment:
You selected this USER-ID:
"Saheetha <[email protected]>"

Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? O
You need a Passphrase to protect your secret key.

gpg: gpg-agent is not available in this session
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.

Not enough random bytes available. Please do some other work to give
the OS a chance to collect more entropy! (Need 287 more bytes)

En este punto, se le pide que genere entropía. La entropía es básicamente la imprevisibilidad en su sistema. Su VPS necesita entropía para crear una clave que en realidad es aleatoria. Si recibe este mensaje como parte resaltada, debe instalar haveged paquete para crear una clave que sea aleatoria y vuelva a intentar el comando.

$apt-get install haveged

Este paquete se puede instalar desde su repositorio predeterminado. Después de la instalación, debe asegurarse de que la siguiente configuración se actualice como se indica a continuación en su archivo de configuración /etc/default/haveged.

DAEMON_ARGS="-w 1024"

Finalmente, solo asegúrese de que esté configurado para iniciarse en el arranque:

$update-rc.d haveged defaults

Después de configurar esto, puede reiniciar gpg --gen-key comando una vez más y completará el proceso con lo siguiente.

$ gpg --gen-key
gpg (GnuPG) 1.4.20; Copyright (C) 2015 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.

Please select what kind of key you want:
(1) RSA and RSA (default)
(2) DSA and Elgamal
(3) DSA (sign only)
(4) RSA (sign only)
Your selection?
RSA keys may be between 1024 and 4096 bits long.
What keysize do you want? (2048)
Requested keysize is 2048 bits
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)
Key is valid for? (0)
Key does not expire at all
Is this correct? (y/N) y

You need a user ID to identify your key; the software constructs the user ID
from the Real Name, Comment and Email Address in this form:
"Heinrich Heine (Der Dichter) <[email protected]>"

Real name: Saheetha
Email address: [email protected]
Comment:
You selected this USER-ID:
"Saheetha <[email protected]>"

Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? O
You need a Passphrase to protect your secret key.

gpg: gpg-agent is not available in this session
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 F03B3360 marked as ultimately trusted
public and secret key created and signed.

gpg: checking the trustdb
gpg: 3 marginal(s) needed, 1 complete(s) needed, PGP trust model
gpg: depth: 0 valid: 1 signed: 0 trust: 0-, 0q, 0n, 0m, 0f, 1u
pub 2048R/F03B3360 2016-11-25
Key fingerprint = F262 785A B5E6 25E9 56E7 4484 3354 43D9 F03B 3360
uid Saheetha <[email protected]>
sub 2048R/C4D85223 2016-11-25

También puede obtener la información de su clave gpg ejecutando este comando.

$ gpg --list-keys
/root/.gnupg/pubring.gpg
------------------------
pub 2048R/F03B3360 2016-11-25
uid Saheetha <[email protected]>
sub 2048R/C4D85223 2016-11-25

Cómo usar la Duplicidad

Ejecutemos una prueba inicial para nuestro sistema de duplicidad creando una carpeta de archivos ficticios para respaldar. Puede crear una carpeta de prueba y crear algunos archivos para respaldar.

$ mkdir Test-DoC
$ cd Test-DoC
$ touch file{1..100}

Ahora, puede ejecutar este comando para hacer una copia de seguridad del servidor en nuestro servidor de copia de seguridad remoto.

$root@duplicity-01:~# duplicity /root/Test-DoC/ sftp://[email protected]//remotebackup/Duplicity
The authenticity of host '45.55.165.191' can't be established.
SSH-RSA key fingerprint is 20:9d:3b:fe:af:df:d1:40:5d:bc:f4:2c:6e:30:54:e0.
Are you sure you want to continue connecting (yes/no)? yes
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 1480059313.48 (Fri Nov 25 07:35:13 2016)
EndTime 1480059313.53 (Fri Nov 25 07:35:13 2016)
ElapsedTime 0.05 (0.05 seconds)
SourceFiles 101
SourceFileSize 4096 (4.00 KB)
NewFiles 101
NewFileSize 4096 (4.00 KB)
DeletedFiles 0
ChangedFiles 0
ChangedFileSize 0 (0 bytes)
ChangedDeltaSize 0 (0 bytes)
DeltaEntries 101
RawDeltaSize 0 (0 bytes)
TotalDestinationSizeChange 1029 (1.00 KB)
Errors 0
-------------------------------------------------

Puede confirmar la copia de seguridad iniciando sesión en nuestro servidor remoto.

root@duplicity-02:/remotebackup/Duplicity# ll
total 20
drwxr-xr-x 2 root root 4096 Nov 25 07:35 ./
drwxr-xr-x 3 root root 4096 Nov 25 07:11 ../
-rw-r--r-- 1 root root 438 Nov 25 07:35 duplicity-full.20161125T073505Z.manifest.gpg
-rw-r--r-- 1 root root 1029 Nov 25 07:35 duplicity-full.20161125T073505Z.vol1.difftar.gpg
-rw-r--r-- 1 root root 1596 Nov 25 07:35 duplicity-full-signatures.20161125T073505Z.sigtar.gpg

Se espera que estos archivos contengan la información de la copia de seguridad. Dado que solo se trata de archivos de prueba, podemos eliminar los archivos completos.

Crear una copia de seguridad de todo el servidor

Vamos a crear nuestra primera copia de seguridad del servidor. Estamos creando una copia de seguridad completa del servidor raíz, excluyendo algunas de las carpetas como /proc, /sys y /tmp. Aquí, necesitamos usar la clave GPG pub ​​generada previamente y Paraphrase para proteger y cifrar nuestros datos. Esta es la sintaxis general para la creación de copias de seguridad.

duplicity --encrypt-key Pub-key_from_GPG --exclude files_to_exclude --include files_to_include path_to_back_up sftp://root@remotebackupHostname//remotebackup/duplicity

Ejecuté este comando para hacer una copia de seguridad de mi servidor.

root@duplicity-01:~# PASSPHRASE="docker" duplicity --encrypt-key F03B3360 --exclude /proc --exclude /sys --exclude /tmp  / sftp://[email protected]//remotebackup/Duplicity/
Local and Remote metadata are synchronized, no sync needed.
Last full backup date: none
No signatures found, switching to full backup.
--------------[ Backup Statistics ]--------------
StartTime 1480143194.50 (Sat Nov 26 06:53:14 2016)
EndTime 1480143304.84 (Sat Nov 26 06:55:04 2016)
ElapsedTime 110.34 (1 minute 50.34 seconds)
SourceFiles 69101
SourceFileSize 885736795 (845 MB)
NewFiles 69101
NewFileSize 885736795 (845 MB)
DeletedFiles 0
ChangedFiles 0
ChangedFileSize 0 (0 bytes)
ChangedDeltaSize 0 (0 bytes)
DeltaEntries 69101
RawDeltaSize 847552198 (808 MB)
TotalDestinationSizeChange 345904578 (330 MB)
Errors 0
-------------------------------------------------

Llevará algún tiempo completar este proceso de copia de seguridad. Debido a que esta es la primera vez que ejecutamos la copia de seguridad, la duplicidad creará una copia de seguridad completa. Duplicity divide los fragmentos de datos en volúmenes para simplificar las transferencias de archivos.

root@duplicity-02:/remotebackup/Duplicity# ll
total 354864
drwxr-xr-x 2 root root 4096 Nov 26 06:55 ./
drwxr-xr-x 3 root root 4096 Nov 25 07:11 ../
-rw-r--r-- 1 root root 303666 Nov 26 06:55 duplicity-full.20161126T065314Z.manifest.gpg
-rw-r--r-- 1 root root 26241374 Nov 26 06:54 duplicity-full.20161126T065314Z.vol10.difftar.gpg
-rw-r--r-- 1 root root 26192752 Nov 26 06:54 duplicity-full.20161126T065314Z.vol11.difftar.gpg
-rw-r--r-- 1 root root 26206134 Nov 26 06:54 duplicity-full.20161126T065314Z.vol12.difftar.gpg
-rw-r--r-- 1 root root 26196266 Nov 26 06:54 duplicity-full.20161126T065314Z.vol13.difftar.gpg
-rw-r--r-- 1 root root 4999361 Nov 26 06:55 duplicity-full.20161126T065314Z.vol14.difftar.gpg
-rw-r--r-- 1 root root 26256306 Nov 26 06:53 duplicity-full.20161126T065314Z.vol1.difftar.gpg
-rw-r--r-- 1 root root 26216804 Nov 26 06:53 duplicity-full.20161126T065314Z.vol2.difftar.gpg
-rw-r--r-- 1 root root 26198345 Nov 26 06:53 duplicity-full.20161126T065314Z.vol3.difftar.gpg
-rw-r--r-- 1 root root 26197666 Nov 26 06:53 duplicity-full.20161126T065314Z.vol4.difftar.gpg
-rw-r--r-- 1 root root 26237799 Nov 26 06:53 duplicity-full.20161126T065314Z.vol5.difftar.gpg
-rw-r--r-- 1 root root 26218126 Nov 26 06:53 duplicity-full.20161126T065314Z.vol6.difftar.gpg
-rw-r--r-- 1 root root 26252966 Nov 26 06:53 duplicity-full.20161126T065314Z.vol7.difftar.gpg
-rw-r--r-- 1 root root 26234136 Nov 26 06:54 duplicity-full.20161126T065314Z.vol8.difftar.gpg
-rw-r--r-- 1 root root 26256543 Nov 26 06:54 duplicity-full.20161126T065314Z.vol9.difftar.gpg
-rw-r--r-- 1 root root 17136137 Nov 26 06:55 duplicity-full-signatures.20161126T065314Z.sigtar.gpg

En una gota nueva, mi configuración creó 15 volúmenes que se transfirieron al sistema remoto. Dado que tenemos una copia de seguridad completa de mi servidor en nuestro servidor de copia de seguridad, la próxima copia de seguridad será una copia de seguridad incremental. Estos son más rápidos y requieren menos tiempo de transferencia de datos. Incluso puede forzar otra copia de seguridad completa simplemente ejecutando este comando.

$PASSPHRASE="docker" duplicity full --encrypt-key F03B3360 --exclude /proc --exclude /sys --exclude /tmp  / sftp://[email protected]//remotebackup/Duplicity/

Programar nuestras copias de seguridad

Ahora podemos aprender cómo programar nuestras copias de seguridad diarias o semanales configurando el script de copia de seguridad para que se ejecute automáticamente. En primer lugar, vamos a crear un archivo de frase de contraseña en nuestra carpeta /root para pasar la frase de contraseña automáticamente sin un aviso interactivo para la paráfrasis.

$cat /root/.passphrase
PASSPHRASE="docker"

Asegure los permisos de archivo y restrinja a 600.

Veamos cómo crear la copia de seguridad diaria. Necesitamos crear nuestro script de respaldo dentro de la carpeta /etc/cron.daily. Todos los trabajos cron configurados dentro de esta carpeta se ejecutarán diariamente.

$:/etc/cron.daily# cat duplicity.inc
#!/bin/sh

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

export PASSPHRASE
$(which duplicity) --encrypt-key F03B3360 --exclude /proc --exclude /sys --exclude /tmp --exclude /var / sftp://[email protected]//remotebackup/Duplicity/

Asegúrese de otorgar permiso de ejecución para el script.

$:/etc/cron.daily# chmod +x duplicity.inc

Podemos ejecutar este script para asegurarnos de que todo funcione correctamente.

root@duplicity-01:/etc/cron.daily# ./duplicity.inc
Local and Remote metadata are synchronized, no sync needed.
Last full backup date: Sat Nov 26 06:53:14 2016
--------------[ Backup Statistics ]--------------
StartTime 1480564726.91 (Thu Dec 1 03:58:46 2016)
EndTime 1480564748.83 (Thu Dec 1 03:59:08 2016)
ElapsedTime 21.91 (21.91 seconds)
SourceFiles 69108
SourceFileSize 899520535 (858 MB)
NewFiles 32
NewFileSize 20761841 (19.8 MB)
DeletedFiles 13
ChangedFiles 9
ChangedFileSize 2779 (2.71 KB)
ChangedDeltaSize 0 (0 bytes)
DeltaEntries 54
RawDeltaSize 20737072 (19.8 MB)
TotalDestinationSizeChange 17502790 (16.7 MB)
Errors 0
-------------------------------------------------

Del mismo modo, podemos programar una copia de seguridad para forzar una copia de seguridad completa semanalmente y mantenerla. Dado que las copias de seguridad incrementales se volverán cada vez más difíciles de manejar a medida que se acumulen los cambios. Configuraremos copias de seguridad completas semanales para actualizar la base.

Hagámoslo creando un script de copia de seguridad completa de duplicidad en la carpeta /etc/cron.weekly. Puede crear un script duplicity.full dentro de este directorio.

$:/etc/cron.weekly# chmod +x duplicity.full
$:/etc/cron.weekly# cat duplicity.full
#!/bin/sh

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

export PASSPHRASE
$(which duplicity) full --encrypt-key F03B3360 --exclude /proc --exclude /sys --exclude /tmp --exclude /var / sftp://[email protected]//remotebackup/Duplicity/

También podemos agregar este comando a nuestro script duplicity.full para limpiar los archivos de copia de seguridad antiguos. Agregue este comando para conservar solo tres copias de seguridad y sus correspondientes copias de seguridad incrementales.

$(which duplicity) remove-all-but-n-full 3 --force sftp://[email protected]//remotebackup/Duplicity/

Por lo tanto, nuestro script semanal creará una copia de seguridad completa para nuestro servidor y eliminará todos los archivos de copia de seguridad antiguos no deseados del servidor. Podemos ejecutar nuestro script manualmente para probar su funcionamiento.

$:/etc/cron.weekly# ./duplicity.full
Local and Remote metadata are synchronized, no sync needed.
Last full backup date: Sat Nov 26 06:53:14 2016
--------------[ Backup Statistics ]--------------
StartTime 1480570674.29 (Thu Dec 1 05:37:54 2016)
EndTime 1480570791.54 (Thu Dec 1 05:39:51 2016)
ElapsedTime 117.26 (1 minute 57.26 seconds)
SourceFiles 69109
SourceFileSize 906577560 (865 MB)
NewFiles 69109
NewFileSize 906577560 (865 MB)
DeletedFiles 0
ChangedFiles 0
ChangedFileSize 0 (0 bytes)
ChangedDeltaSize 0 (0 bytes)
DeltaEntries 69109
RawDeltaSize 868388867 (828 MB)
TotalDestinationSizeChange 363488138 (347 MB)
Errors 0
-------------------------------------------------

Local and Remote metadata are synchronized, no sync needed.
Last full backup date: Thu Dec 1 05:37:53 2016
No old backup sets found, nothing deleted.

Conclusión

¡Felicidades! Tenemos nuestra solución de copia de seguridad automatizada totalmente operativa lista para usar. Una de las principales ventajas de Duplicity frente a otras soluciones de copia de seguridad es que cifra los datos mediante la clave GnuPG. También proporciona una solución de copia de seguridad automatizada que es excelente y se puede realizar mediante tareas sencillas de Cron. ¡Espero que este artículo te sea útil! Publique sus valiosos comentarios y sugerencias al respecto.


Ubuntu
  1. Cómo crear una VPN en Ubuntu 20.04 usando Wireguard

  2. Cómo configurar claves SSH en Ubuntu 18.04

  3. Cómo instalar WordPress usando Nginx en Ubuntu 18.04

  4. Cómo sincronizar directorios usando Lsyncd en Ubuntu 20.04

  5. ¿Cómo instalo Duplicity en Ubuntu?

Cómo instalar Grafana en Ubuntu 20.04

Cómo instalar Browsh en Ubuntu 20.04

Cómo configurar una VPN en Ubuntu

Cómo instalar Ansible en Ubuntu 20.04

¿Cómo actualizar de 12.04 a 12.10 usando Cd?

Cómo instalar Ansible en Ubuntu 18.04