Hola, normalmente cuando queremos hacer copias masivas y recurrentes de seguridad usamos el rsync. No suele haber excesivos problemas en su uso y esta muy bien documentado. El problema me ha surgido cuando he querido hacer una copia de seguridad de cosas criticas fuera del servidor Linux, a unos 600 km (por eso de si sale todo ardiendo) y sobre una maquina windows XP pro.
CLIENTE: (ubuntu 8.10) -----> rsync -----> Internet ----> rsync server (con y sin ssh) SERVIDOR (Windows XP)
A priori si queremos sacar los datos por rsyncd (rsync con contraseña y sin encriptar) lo mas recomendable es instalar en la maquina windows el programita gratuito "DeltaCopy"
http://www.aboutmyip.com/AboutMyXApp/DeltaCopy.jsp que le permitirá al usuario de windows configurar el rsync a golpe de ratón, lo cual es realmente fácil. El problema es que delta copy no trae por defecto el servidor ssh (aunque he leído virguerias por ahi). Como es tan fácil configurarlo como indicar el nombre de la configuración del rsync, poner el directorio, usuario y contraseña pues no me meto mas en explicarlo.
INSTALACIÓN RSYNC CON SSH EN XP
Cuando queremos instalar el rsync con ssh la cosa se complica, yo lo he probado todo y lo mas fácil de instalar es el cwRsyncServer 2.1.5 que trae todo integrado. La versión 3 es bastante mas complicado ya que no viene integrado, y las otras opciones como es el cygwin pues también se complica bastante, aunque todos utilizan el cygwin como base.
Así pues nos lo bajamos el cwRsyncServer 2.1.5 de 8081...
Le damos al botón de instalar y se instala por defecto en C:\Archivos de programa\cwRsyncServer que no es mal sitio
Si vamos a los servicios de windows veremos que hay dos nuevos servicios, el Openssh SSHD y el RsyncServer. Los podemos arrancar independientemente (según queramos acceder solo por ssh o solo por rsyncd o de ambas maneras) y para que al iniciar windows arranquen ambos entramos en el servicio lo arrancamos y lo ponemos en auto.
Realmente tenemos dos servicios independientes, el Rsyncserver coge los ficheros de configuración C:\Archivos de programa\cwRsyncServer y el Openssh en referencia a rsync los coje de C:\Archivos de programa\cwRsyncServer\home\elusuario siendo el usuario normalmente "Administrador" y lo haremos así para este ejemplo. Se supone que poniendo los archivos rsyncd.conf en ambas carpetas ya basta, pues lo malo del asunto es que no acaba aquí, pero vamos por partes
CONFIGURACIÓN DEL RSYNCD
Concepto previo:
El rsync trabaja con el cywing (emulador de linux en windows), cuando estamos en windows y nos metemos dentro del sistema "linux virtual" estamos realmente en C:\Archivos de programa\cwRsyncServer y para salirnos fuera hay que seguir la ruta virtual mas la real "/cygdrive/"+"t/Backup"
Programamos el rsyncd.conf (para cada servicio) quedando una pinta como esta:
use chroot = false
strict modes = false
log file = rsyncd.log
pid file = rsyncd.pid
host allow = *
# Module definitions
# Remember cygwin naming conventions : c:\work becomes /cygwin/c/work
#
[PRUEBA]
path = /cygdrive/t/Backup
read only = false
transfer logging = yes
auth users = Administrador
secrets file = /cygdrive/c/rsyncd.secrets
el secrets file para ssh no hace falta, pero para el rsyncd si, y es un archivo muy simple "Administrador:clave" con un enter al final, si no, no lo lee. y ya ta, muy facil y normalmente no da problemas.
CONFIGURACION DEL SSH
En la instalación se suponía que se habían generado unas claves para el ssh pero las que ha generado no valen ya que son del usuario que instala en windows no del que recibe en linux.
Para la certificación en ssh sin tener que teclear cada vez que se accede desde una máquina remota, básicamente hay que generar claves en el lado Host (el que interroga) y Server (el que tiene el servicio abierto y espera), después se coje la clave publica del Host (id_rsa.pub) y se coloca en authorized_keys del Server, al conectar por primera vez el host registrará en su know_hosts una clave del server...
El comando para generar las claves es ssh-keygen -t rsa te pones como usuario del que va a generar la consulta en el linux, lo ejecutas y te da en su carpeta /home/usuario/.ssh/ las dos claves, se supone que copias la publica en el archivo authorized_keys (a veces es authorized_keys2) del server y resuelto.
PROBLEMAS
La configuracion del ssh, se hace con los ususarios de windows, y por tanto hay que Sincronizar los usuarios de linux (que realmente esta corriendo dentro de la maquina de windows) y windows: por tanto en una consola de linux que viene con el cwRsyncServer ejecutar
mkpasswd -cl > /etc/passwd
mkgroup --local > /etc/group
Otro problema es que por error de instalación no crea los directorios de los usuarios "server", basicamente el Administrador o el usuario que reciba el ssh. Hay que crear el el directorio de instalación de cwRsyncServer/home/Administrador/.ssh/ para que ahí dentro se pueda dejar un archivo el authorized_keys
Hay que descomentar la linea "AuthorizedKeysFile .ssh/authorized_keys" del fichero "sshd_config" que esta en el directorio /etc/ (dentro del direcotorio de instalacion del cwRsyncServer)
El ssh no funcionara si hay excesivos permisos de las carpetas y archivos, por tanto hay que limitarlo con chmod
$ chmod 700 /home/administrador
$ chmod 700 /home/administrador/.ssh
$ chmod 600 /home/administrador/.ssh.ssh/authorized_keys
El último problema es el de los propietarios, resulta que si todos los directorios y archivos del usuario virtual linux que están dentro de windows (C:\Archivos de programa\cwRsyncServer\home\"usuario")que en mi caso son: Administrador, .ssh y el archivo authorized_keys tienen que ser del usuario del server con el que tratamos de entrar (Administrador en nuestro caso) si no pues tampoco funciona, normalmente hay que cambiarlo desde la consola con el comando
chown -R nuevopropietario /rutadelarchivo
Y con todo esto debiera de funcionar después de un reinicio del servicio
Todos estos trucos son relativamente evitables si vamos a utilizar el usuario que ha intalado todo y si con ese usuario creamos la carpeta del usuario en C:\Archivos de programa\cwRsyncServer\home\ y posteriormente creamos el archivo y los directorios desde el mismo usuario de windows. Lo que no nos quita nadie es el tema de permisos y el de sincronizar los usuarios de windows y linux.
Comandos Rsync:
como no es el objeto de este tutorial explicar el funcionamiento del rsync me limito a poner los comandos rsync que yo utilizo desde linux sin ssh y con ssh.
rsyncd
"/usr/bin/rsync --verbose --archive --recursive --update --delete --force --compress --password-file=/home/BackupRemotoConfig/rsync.secrets --stats --progress --files-from=/home/BackupRemotoConfig/listabackup --exclude-from=/home/BackupRemotoConfig/listaexcluirbackup /media/sda3/ Administrador@direcciondelxp::PRUEBA"
consiste en hacer el rsync cogiendo el listado de carpetas a mandar del archivo "listabackup", excluyendo los archivos o directorios que vienen listados en "BackupRemotoConfig".
rsync ssh
"/usr/bin/rsync -e ssh --verbose --archive --recursive --update --delete --force --compress --stats --progress --files-from=/home/BackupRemotoConfig/listabackup --exclude-from=/home/BackupRemotoConfig/listaexcluirbackup /media/sda3/ Administrador@direcciondelxp::PRUEBA"
Ahora mandamos todo encriptado pero en la configuracion del rsyncserver no ponemos exclusividad de usuario y contraseña
rsyncd ssh
"/usr/bin/rsync -e ssh --verbose --archive --recursive --update --delete --force --compress --stats --progress --files-from=/home/BackupRemotoConfig/listabackup --exclude-from=/home/BackupRemotoConfig/listaexcluirbackup /media/sda3/ Administrador@direcciondelxp::PRUEBA"
Es la suma de los dos anteriores, lo mandamos encriptado pero además con usuario y contraseña, la verdad es que no tiene sentido si no es porque en el servidor tengamos enlaces simbólicos en vez de archivos para tenerlo todo unificado con la misma configuración mandase o no codificado. Yo lo utilizo para facilitarle al usuario de XP la configuración ya que la hace desde el programa DeltaCopy y se la copio para el uso de en cwRsyncServer ssh.
Todo estos consejos también son validos para hacer backups de windows con Backuppc en ubuntu (muy recomendable) ya que puedes configurar el backuppc con "rsync ssh" o bien con "rsyncd" y funiona perfectamente, aunque lógicamente lo mas facil es usar "rsyncd" y el programita DeltaCopy