Hoy he conocido el comando rsync gracias una problemática de respaldos que estaban realizando en el lugar en donde estoy haciendo la practica. El punto es que estuve buscando una herramienta libre que hiciera respaldos incrementales para winbugs (lamentablemente lo usan, pero la vez que puedo les entrego herramientas libres y lo que se pierden por no tener Linux), en eso doy con DeltaCopy, un programa (para windows) que hace uso de rsync a través de Cygwin. Y eso me doy la idea para programar este script para hacer respaldos de directorios tanto locales como remotos a través de ssh. Para hacerla mas amigable he usado zenity y libnotify1. Antes de ejecutar el script instalaremos las dependencias con el siguiente comando:
sudo aptitude install openssh-server openssh-client zenity libnotify1 rsync
Script:
#!/bin/bash
#Creado por leonciokof
#lgaticastyle@gmail.com
#http://ubuntuparatodos.wordpress.com
#Licencia GPL
#Dependencias: openssh-server openssh-client zenity libnotify1 rsync
zenity --info --text="Backup con Rsync by Leonciokof"
backupLocal(){
zenity --info --text="Seleccionar el directorio que desea respaldar (origen)"
dirOrigen=`zenity --file-selection --title="Seleccionar el directorio que desea respaldar" --directory`
case $? in
1)
menu;;
esac
zenity --info --text="Seleccionar el directorio de respaldo (destino)"
dirDestino=`zenity --file-selection --title="Seleccionar el directorio de respaldo" --directory`
case $? in
1)
menu;;
esac
notify-send "Inicio del Respaldo"
rsync -altgvb "$dirOrigen/" "$dirDestino"
}
backupRemoto(){
zenity --info --text="Seleccionar el directorio que desea respaldar"
dirLocal=`zenity --file-selection --title="Seleccionar el directorio que desea respaldar" --directory`
case $? in
1)
menu;;
esac
zenity --info --text="Seleccionar el directorio de respaldo remoto"
dirRemoto=`zenity --entry --title="Directorio Remoto" --text="Introdusca la ruta del directorio remoto, ej: /home/leonardo/Respaldo/"`
case $? in
1)
menu;;
esac
if [ "$dirRemoto" = "" ]; then
zenity --error --text="Error, no ha ingresado un directorio"
menu
fi
usuario=`zenity --entry --title="Usuario Remoto" --text="Introdusca el nombre del ususario remoto, ej: leonardo"`
case $? in
1)
menu;;
esac
if [ "$usuario" = "" ]; then
zenity --error --text="Error, no ha ingresado un usuario"
menu
fi
ip=`zenity --entry --title="Direccion IP Remota" --text="Introdusca la direccion IP remota, ej: 192.168.1.2"`
case $? in
1)
menu;;
esac
if [ "$ip" = "" ]; then
zenity --error --text="Error, no ha ingresado una direccion IP"
menu
fi
claveSsh=`find ~/.ssh/ -iname "id_rsa.pub"`
if [ -f "$claveSsh" ]; then
ssh-copy-id -i ~/.ssh/id_rsa.pub "$usuario"@"$ip"
else
zenity --info --text="Dejar en blanco la palabra clave"
ssh-keygen -t rsa
ssh-copy-id -i ~/.ssh/id_rsa.pub "$usuario"@"$ip"
fi
notify-send "Inicio del Respaldo"
rsync -e ssh -altgvb "$dirLocal" "$usuario"@"$ip":"$dirRemoto"
}
menu(){
tipo=`zenity --list --title="Elija el tipo de respaldo" --radiolist --print-column=2 \
--column="" --column="Tipo" \
TRUE "Local" \
FALSE "Remoto"`
case $? in
1)
exit 1;;
esac
if [ "$tipo" = "Local" ]; then
backupLocal
else
backupRemoto
fi
}
menu
notify-send "Respaldo Finalizado"
zenity --info --text="Respaldo realizado satisfactoriamente"
Descarga: Backup.sh
Para ejecutar el script le dan doble clic y eligen la opción ”Ejecutar en una terminal”
Notas: Para el respaldo remoto debe tener instalados los paquetes openssh-server y openssh-client en ambos equipos, ademas debe conocer la dirección ip del equipo remoto (en consola ejecutar ifconfig), conocer la ruta de la carpeta de respaldo y conocer un usuario que tenga cuenta en el equipo remoto.





Comentarios recientes