viernes, 27 de noviembre de 2009

Backups con rsync

Una pequeña guía que iré modificando para hacer respaldos con rsync

Rsync es una herramienta para sincronizar los ficheros y directorios que tenemos almacenados en un sitio en otro diferente minimizando la transferencia de datos. En realidad, rsync son dos cosas: unalgoritmo de delta compression para sincronizar dos ficheros similares y una utilidad que usa dicho algoritmo junto con otras técnicas para hacer mirroring de ficheros y directorios en otro sitio transfiriendo la mínima cantidad de datos posible.

A nivel de un árbol de directorios con sus ficheros, la idea es sencilla. rsync nos copiará esos ficheros y directorios tal y como estaban en el nuevo sitio pero sin copiar todo, sino sólo lo que ha cambiado en el origen respecto al destino. Hacer lo mismo copiando los ficheros y directorios, incluso en remoto usando una carpeta compartida, sería equivalente si nos fijamos únicamente en el resultado, pero tenemos que transferir mucha más información.

El listado de características especiales que nos da la página de man de rsync es:

  • Soporte para copiar enlaces, ficheros de dispositivo, propietarios, grupos y permisos

  • Opciones de exclusión (exclude y exclude-from) similares a las del GNU tar

  • Modo CVS para ignorar los fichero que CVS ignoraría

  • Se puede usar cualquier shell remota transparente, como ssh o rsh

  • No es necesario ser root para usarlo

  • pipelining de los ficheros transferidos para minimizar la latencia

  • Soporte para usuarios anónimos o autentificados usando el demonio de rsync (ideal para hacer mirroring


NOTA IMPORTANTE:

La barra al final de los nombres de directorio

Respecto a cómo pasarle los nombres de los directorios, hay que tener una especial atención respecto a si ponemos una barra al final del nombre del directorio o no, ya que significan cosas distintas:

You can think of a trailing / on a source as meaning “copy the contents of this directory” as opposed to “copy the directory by name”, but in both cases the attributes of the containing directory are transferred to the containing directory on the destination. In other words, each of the following commands copies the files in the same way, including their setting of the attributes of /dest/foo:

rsync -av /src/foo /dest

rsync -av /src/foo/ /dest/foo

Efectivamente, /path/foo significa “el directorio foo“, mientras que /path/foo/ significa “lo que hay dentro de foo“.













RSYNC remoto

En la máquina destino es posible usar el propio proceso rsync funcionando como demonio y escuchando por defecto en el puerto 873 para recibir estas conexiones, pero es mucho más cómodo y fácil hacerlo por SSH, algo para lo que rsync ya está preparado por defecto.

Para esto es conveniente configurar el cliente y el servidor de SSH involucrados para entrar de forma transparente usando autentificación por clave pública para evitar tener que introducir la contraseña cada vez, aunque no es estrictamente necesario.

Autentificación trasparente por clave pública/privada con OpenSSH

El primer paso es generar la pareja de claves pública/privada en el cliente con el comando ssh-keygen:
$ ssh-keygen

Generating public/private rsa key pair.

Enter file in which to save the key (/home/supercoco/.ssh/id_rsa):

Enter passphrase (empty for no passphrase):

Enter same passphrase again:

Your identification has been saved in /home/supercoco/.ssh/id_rsa.

Your public key has been saved in /home/supercoco/.ssh/id_rsa.pub.

The key fingerprint is:

5c:7b:3d:44:21:09:84:a1:e6:8b:42:4e:ec:39:d6:92 supercoco@cliente

Si no le especificamos opciones, el comando crea una clave RSA de 2048 bits, pero podemos cambiar este comportamiento. Por ejemplo, para clave DSA de 1024 bits, sería:
$ ssh-keygen -t dsa -b 1024

Generating public/private dsa key pair.

Enter file in which to save the key (/home/supercoco/.ssh/id_dsa):

Enter passphrase (empty for no passphrase):

Enter same passphrase again:

Your identification has been saved in /home/supercoco/.ssh/id_dsa.

Your public key has been saved in /home/supercoco/.ssh/id_dsa.pub.

The key fingerprint is:

91:84:38:fd:03:b4:74:5a:1c:ad:48:c4:da:57:3b:cc supercoco@cliente

Hay que tener en cuenta que si le especificamos una passphrase, tendremos que introducirla manualmente cada vez que queramos usar la clave privada, por lo que la autentificación no será transparente. Por ello, aunque no sea lo más seguro, para nuestro propósito es necesario dejarla en blanco.

Y ahora sólo tenemos que copiar el contenido el fichero id_dsa.pub o del id_rsa.pub en el fichero authorized_keys del directorio $HOME/.ssh/ del usuario del sistema con servidor SSH al que queremos acceder.

Por ejemplo, si queremos entrar en el servidor SSH con el usuario ranagustavo, tendríamos que añadir el contenido de los ficheros/home/supercoco/.ssh/id_dsa.pub/home/supercoco/.ssh/id_rsa.pub del cliente de SSH al fichero /home/supercoco/.ssh/authorized_keys del servidor de SSH.

Si tenemos la contraseña para entrar, podríamos incluso hacerlo desde el cliente con un par de comandos:
$ scp $HOME/.ssh/id_dsa.pub ranagustavo@servidor:id_dsa.pub.supercoco.cliente

Password:

id_dsa.pub

$ ssh ranagustavo@servidor 'cat id_dsa.pub.supercoco.cliente >> .ssh/authorized_keys'

y ya podemos entrar sin introducir la contraseña:
$ ssh ranagustavo@servidor

Linux servidor 2.6.22 #2 SMP Sun Dec 9 19:33:44 CET 2007 x86_64

The programs included with the Debian GNU/Linux system are free software;

the exact distribution terms for each program are described in the

individual files in /usr/share/doc/*/copyright.

Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent

permitted by applicable law.

No mail.

Last login: Sun Jan 13 22:12:58 2008 from cliente

ranagustavo@servidor ~ $

Una vez que esté configurado correctamente, podemos incluso querer configurar el servidor de SSH para que no acepte clientes que quieran entrar por el método estándar, la contraseña. Para ello, partiendo de la configuración estándar de Debian (con otras configuraciones base, puede ser necesario hacer más cosas), sólo tenemos que cambiar los parámetros ChallengeResponseAuthenticationPasswordAuthentication del fichero /etc/ssh/sshd_config a “no“:
# Change to yes to enable challenge-response passwords (beware issues with

# some PAM modules and threads)

ChallengeResponseAuthentication no

# Change to no to disable tunnelled clear text passwords

PasswordAuthentication no

Ademas de agregar

AllowUsers usuario_que_tu_decidas

No permitir que root se pueda conectar
PermitRootLogin no

Con un “/etc/init.d/ssh reload” conseguiremos que el sshd relea la configuración.

Agregamos en el .bashrc del usuario:
#eval `ssh-agent`

#ssh-add

eval `ssh-agent`


ssh-add


CONFIGURACIÓN DE RSYNC




Please use the script code below (modify as needed), as it will only sync to “touched” files.



#!/bin/bash
rsync -avz –size-only -e “ssh -i /root/rsync-key” /etc/asterisk/extensions.conf
root@192.168.1.3:/etc/asterisk/extensions.conf
rsync -avz –size-only -e “ssh -i /root/rsync-key” /etc/asterisk/voicemail.conf
root@192.168.1.3:/etc/asterisk/voicemail.conf
rsync -avz –size-only -e “ssh -i /root/rsync-key” /etc/asterisk/queues.conf
root@192.168.1.3:/etc/asterisk/queues.conf
rsync -avz –size-only -e “ssh -i /root/rsync-key” /etc/asterisk/sip.conf
root@192.168.1.3:/etc/asterisk/sip.conf
rsync -avzr –size-only -e “ssh -i /root/rsync-key” /var/spool/asterisk/voicemail
root@192.168.1.3:/var/spool/asterisk
rsync -avzr –size-only -e “ssh -i /root/rsync-key” /var/lib/asterisk/moh
root@192.168.1.3:/var/lib/asterisk/moh
rsync -avzr –size-only -e “ssh -i /root/rsync-key” /var/lib/asterisk/sounds
root@192.168.1.3:/var/lib/asterisk
rsync -avzr –size-only -e “ssh -i /root/rsync-key” /home/PlcmSpIp
root@192.168.1.3:/home
rsync -avzr –size-only -e “ssh -i /root/rsync-key” /var/www/html/
root@192.168.1.3:/var/www




No hay comentarios.:

Publicar un comentario