Shell Script para respaldar archivos y directorios usando rsync
En este artículo traemos scripts de shell para hacer una copia de seguridad de sus archivos y directorios desde su máquina Linux local a un servidor Linux remoto usando el comando rsync. Esta sería una forma interactiva de realizar una copia de seguridad, donde debe proporcionar el nombre de host / dirección IP del servidor de copia de seguridad remoto y la ubicación de la carpeta. Guardamos un archivo separado donde necesita proporcionar archivos y directorios que necesitan copia de seguridad. Hemos agregado dos scripts donde primer guion pedir contraseña después de que se haya copiado cada archivo (si ha habilitado las claves de autenticación ssh, no se le pedirá la contraseña) y en segundo guión La contraseña se solicitará solo una vez.
Vamos a hacer una copia de seguridad de bckup.txt, dataconfig.txt, docs y oracledb.
[root@Fedora21 tmp]# ls -l
total 12
-rw-r – r–. 1 raíz raíz 0 15 de mayo 10:43 bckrsync.sh
-rw-r – r–. 1 raíz raíz 0 15 de mayo 10:44 bckup.txt
-rw-r – r–. 1 raíz raíz 0 15 de mayo 10:46 dataconfig.txt
drwxr-xr-x. 2 root root 4096 15 de mayo 10:45 docs
drwxr-xr-x. 2 raíz raíz 4096 15 de mayo 10:44 oracledb
Este archivo contiene archivos de respaldo / detalles de directorio
[root@Fedora21 tmp]# cat /tmp/bckup.txt
/ tmp / oracledb
/tmp/dataconfig.txt
/ tmp / docs
[root@Fedora21 tmp]#
Guión 1:
#!/bin/bash #We will save path to backup file in variable backupf="/tmp/bckup.txt" #Next line just prints message echo "Shell Script Backup Your Files / Directories Using rsync" #next line check if entered value is not null, and if null it will reask user to enter Destination Server while [ x$desthost = "x" ]; do #next line prints what userd should enter, and stores entered value to variable with name desthost read -p "Destination backup Server : " desthost #next line finishes while loop done #next line check if entered value is not null, and if null it will reask user to enter Destination Path while [ x$destpath = "x" ]; do #next line prints what userd should enter, and stores entered value to variable with name destpath read -p "Destination Folder : " destpath #next line finishes while loop done #Next line will start reading backup file line by line for line in `cat $backupf` #and on each line will execute next do #print message that file/dir will be copied echo "Copying $line ... " #copy via rsync file/dir to destination rsync -ar "$line" "$desthost":"$destpath" #this line just print done echo "DONE" #end of reading backup file done
Ejecutando el script con salida
[root@Fedora21 tmp]# ./bckrsync.sh Shell Script Backup Your Files / Directories Using rsync Destination backup Server : 104.*.*.41 Destination Folder : /tmp Copying /tmp/oracledb ... The authenticity of host '104.*.*.41 (104.*.*.41)' can't be established. ECDSA key fingerprint is 96:11:61:17:7f:fa:...... Are you sure you want to continue connecting (yes/no)? yes Warning: Permanently added '104.*.*.41' (ECDSA) to the list of known hosts. root@104.*.*.41's password: DONE Copying /tmp/dataconfig.txt ... root@104.*.*.41's password: DONE Copying /tmp/docs ... root@104.*.*.41's password: DONE [root@Fedora21 tmp]#
Guión 2:
#!/bin/bash #We will save path to backup file in variable backupf="/tmp/bckup.txt" #Next line just prints message echo "Shell Script Backup Your Files / Directories Using rsync" #next line check if entered value is not null, and if null it will reask user to enter Destination Server while [ x$desthost = "x" ]; do #next line prints what userd should enter, and stores entered value to variable with name desthost read -p "Destination backup Server : " desthost #next line finishes while loop done #next line check if entered value is not null, and if null it will reask user to enter Destination Path while [ x$destpath = "x" ]; do #next line prints what userd should enter, and stores entered value to variable with name destpath read -p "Destination Folder : " destpath #next line finishes while loop done #next line check if entered value is not null, and if null it will reask user to enter password while [ x$password = "x" ]; do #next line prints what userd should enter, and stores entered value to variable with name password. #To hide password we are using -s key read -sp "Password : " password #next line finishes while loop done #Next line will start reading backup file line by line for line in `cat $backupf` #and on each line will execute next do #print message that file/dir will be copied echo "Copying $line ... " #we will use expect tool to enter password inside script /usr/bin/expect << EOD #next line set timeout to -1, recommended to use set timeout -1 #copy via rsync file/dir to destination, using part of expect — spawn command spawn rsync -ar ${line} ${desthost}:${destpath} #as result of previous command we expect “password” promtp expect "*?assword:*" #next command enters password from script send "${password}r" #next command tells that we expect end of file (everything finished on remote server) expect eof #end of expect pard EOD #this line just print done echo "DONE" #end of reading backup file done
Captura de pantalla ejecutando el segundo script con salida
¡Espero que estos scripts te ayuden a realizar copias de seguridad!