Hola, otra noche larga buscando como hacer un script como la gente con lo poco que se de ambas cosas 
Necesito tener un respaldo de información en un lugar seguro y todos sabemos que dropbox y amigos no cumplen con esto. La única opción que me deja tranquilo es que sea en otro equipo mio. Especialmente porque son los datos del negocio familiar.
Entonces, la tarea es hacer un script decente para actualizar los datos en la computadora remota (la mía), con las siguientes restricciones:
1. Uso rápido y directo: solo es el script, sin parámetros en la linea de comandos
2. Independiente del usuario: cualquiera lo ejecuta y cumple su función
3. Crea los directorios remotos
4. Usa un usuario exclusivo: sin derechos para otras cosas
5. Crea los archivos con permisos locales: por comodidad, asi los puedo manipular con dicho usuario
6. Solamente copie cierto tipo de archivos e ignore una carpeta: documentos de texto y planillas de calculo, pero no las que estén en la carpeta de descargas (esas no son creadas, son bajadas)
Uso Rsync como herramienta de copia porque me permite usar un tunel ssh y hace copias diferenciales. Entonces, tengo seguridad y simpleza con ssh y velocidad con la copia diferencial. Manos a la obra !

Creamos el usuario en el servidor donde vamos a copiar los datos. Yo lo llame backup para tener presente que hace ahí y le di un UID especial para poder discriminarlo fácilmente, sin contraseña (se la borro después!), para que no pueda loguearse y lo agregué a la lista de posibles de mi servidor SSH (lo tengo restringido). Entonces, solo puedo hacer un "#su backup" para cambiar a ese usuario o loguearme remotamente por ssh, un encanto.
Creamos para, cada usuario en la computadora que contiene los datos originales, las llaves para el cliente ssh.
con:
$ ssh-keygen -t dsa
Dejamos la passphrase vaciá para no tener que usar clave (es el objetivo de este paso)
Creamos una configuración para ssh, también para cada usuario es esto. Agregando (creando si no existe) al archivo $HOME/.ssh/config:
donde: Host es el nombre por el cual lo vamos a llamar (a gusto)
HostName es la dirección del servidor (la de verdad)
Port es el puerto en el cual debemos dirigirnos para hacer ssh a la computadora a la cual vamos a copiar los datos (puede ser redireccionado de un router)
ahora copiamos la llave publica al servidor:
$ scp $HOME/.ssh/id_dsa.pub servidor.remoto:
donde dice servidor.remoto, va lo que pusieron en el archivo anterior !
ahora en el servidor tenemos que agregar esa llave a donde corresponde.
$ cat $HOME/id_dsa.pub >> $HOME/.ssh/authorized_keys
y después borramos el archivito con:
$ rm $HOME/id_dsa.pub
A partir de ahora, se puede ingresar por ssh como el usuario que estabamos usando desde la computadora con los datos originales, como usuario backup en el servidor. SIN CLAVE !, asi que OjO
Ahora algo nada trivial: Tenemos que tener instalado rsync en las dos computadoras. Cada uno sabra como hacerlo en la suya.
Termino pasando el script que copio en /usr/bin, le doy permisos de ejecución y listo.
Entonces, ejecutando backup-rsync.sh como el usuario que creo las llaves hoy temprano, sucede lo siguiente:
1. Define cual es el servidor y el usuario en el mismo.
2. Define las extensiones de archivos a copiar
3. Define el nombre de la lista de archivos a copiar (queda de testigo de la última operación)
4. Cambia al home del mismo;
5. Escribe el nombre de la lista en la misma lista (para borrarla y agregarla a la lista de archivos a copiar)
6. Agrega a la lista todos los archivos que tienen las extensiones arriba definidas excepto los de la carpeta Descargas. Las extensiones las pongo en mayúsculas y minúsculas porque en linux son caracteres diferentes.
7. Hace la copia de los archivos que faltan en el servidor.
Me salió un puema !
Me funciona de 10+ y estoy atento a cualquier mejora o incorporación de funcionalidades que me sugieran.
Solo me queda agregarlo a la lista de cron para que lo ejecute todos los días cerca de la hora de cierre.
Espero que le sirva a alguien
Salu2

Necesito tener un respaldo de información en un lugar seguro y todos sabemos que dropbox y amigos no cumplen con esto. La única opción que me deja tranquilo es que sea en otro equipo mio. Especialmente porque son los datos del negocio familiar.
Entonces, la tarea es hacer un script decente para actualizar los datos en la computadora remota (la mía), con las siguientes restricciones:
1. Uso rápido y directo: solo es el script, sin parámetros en la linea de comandos
2. Independiente del usuario: cualquiera lo ejecuta y cumple su función
3. Crea los directorios remotos
4. Usa un usuario exclusivo: sin derechos para otras cosas
5. Crea los archivos con permisos locales: por comodidad, asi los puedo manipular con dicho usuario
6. Solamente copie cierto tipo de archivos e ignore una carpeta: documentos de texto y planillas de calculo, pero no las que estén en la carpeta de descargas (esas no son creadas, son bajadas)
Uso Rsync como herramienta de copia porque me permite usar un tunel ssh y hace copias diferenciales. Entonces, tengo seguridad y simpleza con ssh y velocidad con la copia diferencial. Manos a la obra !


Creamos el usuario en el servidor donde vamos a copiar los datos. Yo lo llame backup para tener presente que hace ahí y le di un UID especial para poder discriminarlo fácilmente, sin contraseña (se la borro después!), para que no pueda loguearse y lo agregué a la lista de posibles de mi servidor SSH (lo tengo restringido). Entonces, solo puedo hacer un "#su backup" para cambiar a ese usuario o loguearme remotamente por ssh, un encanto.
Creamos para, cada usuario en la computadora que contiene los datos originales, las llaves para el cliente ssh.
con:
$ ssh-keygen -t dsa
Dejamos la passphrase vaciá para no tener que usar clave (es el objetivo de este paso)
Creamos una configuración para ssh, también para cada usuario es esto. Agregando (creando si no existe) al archivo $HOME/.ssh/config:
$HOME/.ssh/config dijo:Host servidor.remoto
HostName servidor.dyndns.org
Port 22
donde: Host es el nombre por el cual lo vamos a llamar (a gusto)
HostName es la dirección del servidor (la de verdad)
Port es el puerto en el cual debemos dirigirnos para hacer ssh a la computadora a la cual vamos a copiar los datos (puede ser redireccionado de un router)
ahora copiamos la llave publica al servidor:
$ scp $HOME/.ssh/id_dsa.pub servidor.remoto:
donde dice servidor.remoto, va lo que pusieron en el archivo anterior !
ahora en el servidor tenemos que agregar esa llave a donde corresponde.
$ cat $HOME/id_dsa.pub >> $HOME/.ssh/authorized_keys
y después borramos el archivito con:
$ rm $HOME/id_dsa.pub
A partir de ahora, se puede ingresar por ssh como el usuario que estabamos usando desde la computadora con los datos originales, como usuario backup en el servidor. SIN CLAVE !, asi que OjO
Ahora algo nada trivial: Tenemos que tener instalado rsync en las dos computadoras. Cada uno sabra como hacerlo en la suya.
Termino pasando el script que copio en /usr/bin, le doy permisos de ejecución y listo.

/usr/bin/backup-rsync.sh dijo:#!/bin/bash
#si el puerto remoto para ssh no es el 22, hay que agregar
# la configuracion en .ssh/config !!!
SERVIDOR=servidor.remoto
USUARIO=backup
EXTENSIONES='DOC doc DOCX docx ABW abw XLS xls XLSX xlsx GNUMERIC gnumeric'
LISTA=.lastsync
busqueda () {
find * -path 'Descargas' -prune -o -print | grep $1$
}
#Cambia al home
cd $HOME
#Lista en blanco
echo "$LISTA" > $LISTA
#Poblamos la lista
for i in $EXTENSIONES;
do busqueda $i >> $LISTA;
done
#Sincronizamos los archivos de la lista con el server
rsync -av --progress --files-from=$LISTA . --rsh ssh $USUARIO@$SERVIDOR:$USER
Entonces, ejecutando backup-rsync.sh como el usuario que creo las llaves hoy temprano, sucede lo siguiente:
1. Define cual es el servidor y el usuario en el mismo.
2. Define las extensiones de archivos a copiar
3. Define el nombre de la lista de archivos a copiar (queda de testigo de la última operación)
4. Cambia al home del mismo;
5. Escribe el nombre de la lista en la misma lista (para borrarla y agregarla a la lista de archivos a copiar)
6. Agrega a la lista todos los archivos que tienen las extensiones arriba definidas excepto los de la carpeta Descargas. Las extensiones las pongo en mayúsculas y minúsculas porque en linux son caracteres diferentes.
7. Hace la copia de los archivos que faltan en el servidor.
Me salió un puema !
Me funciona de 10+ y estoy atento a cualquier mejora o incorporación de funcionalidades que me sugieran.
Solo me queda agregarlo a la lista de cron para que lo ejecute todos los días cerca de la hora de cierre.
Espero que le sirva a alguien
Salu2
