Backup procedure: Difference between revisions
Line 16: | Line 16: | ||
Create a user for the backup script with the public key copied before | Create a user for the backup script with the public key copied before | ||
<pre>adduser --disabled-password --gecos "" | <pre>adduser --disabled-password --gecos "" backup-user | ||
mkdir /home/ | mkdir /home/backup-user/.ssh | ||
touch /home/ | touch /home/backup-user/.ssh/authorized_keys | ||
echo 'ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAuP+3RNIk3C7/fDU/hSexdkH4da8ZW3DdO53kemVtsEk8TOskD1GEzJxhLB6SHbC/ke9295nFXHMNsbSOKgs6HHPqOgaaX0Ff5RmDZK7psSLvBJp745f6R6LtzHHMRZrY0FV2q0dKTZBT71/uv+7/kd9QgDGci7qAkpRmAihLBryVnt9hYZrm04D/G6CGhdgt0I257sUnQ8RwdAIUNyjMlFTahJUFBuvJi3qEJ11S6D7lQZC3VddO6KlgYPvpZOtf/5aLbzlNZALeP1wSw83+Bkk9wU8nQ/KpZyQPy8NYRTw5fYWfCoOg98cElaU00ZMTBEwA+bssTzdLpe9xPLO/AQ== chris@chris-desktop' > /home/ | echo 'ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAuP+3RNIk3C7/fDU/hSexdkH4da8ZW3DdO53kemVtsEk8TOskD1GEzJxhLB6SHbC/ke9295nFXHMNsbSOKgs6HHPqOgaaX0Ff5RmDZK7psSLvBJp745f6R6LtzHHMRZrY0FV2q0dKTZBT71/uv+7/kd9QgDGci7qAkpRmAihLBryVnt9hYZrm04D/G6CGhdgt0I257sUnQ8RwdAIUNyjMlFTahJUFBuvJi3qEJ11S6D7lQZC3VddO6KlgYPvpZOtf/5aLbzlNZALeP1wSw83+Bkk9wU8nQ/KpZyQPy8NYRTw5fYWfCoOg98cElaU00ZMTBEwA+bssTzdLpe9xPLO/AQ== chris@chris-desktop' > /home/backup-user/.ssh/authorized_keys | ||
chown -R | chown -R backup-user:backup-user /home/backup-user/.ssh | ||
chmod 600 /home/ | chmod 600 /home/backup-user/.ssh/authorized_keyss</pre> | ||
Add entry in /etc/sudoers for the created user | Add entry in /etc/sudoers for the created user |
Revision as of 06:16, 22 August 2023
This page will describe how a backup procedure would look.
On backup server
Install rsync
apt-get install rsync
Switch to root and create a private/public key pair
sudo su - ssh-keygen
Copy the public key from /root/.ssh/id_rsa.pub
On target server(s)
Install rsync
apt-get install rsync
Create a user for the backup script with the public key copied before
adduser --disabled-password --gecos "" backup-user mkdir /home/backup-user/.ssh touch /home/backup-user/.ssh/authorized_keys echo 'ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAuP+3RNIk3C7/fDU/hSexdkH4da8ZW3DdO53kemVtsEk8TOskD1GEzJxhLB6SHbC/ke9295nFXHMNsbSOKgs6HHPqOgaaX0Ff5RmDZK7psSLvBJp745f6R6LtzHHMRZrY0FV2q0dKTZBT71/uv+7/kd9QgDGci7qAkpRmAihLBryVnt9hYZrm04D/G6CGhdgt0I257sUnQ8RwdAIUNyjMlFTahJUFBuvJi3qEJ11S6D7lQZC3VddO6KlgYPvpZOtf/5aLbzlNZALeP1wSw83+Bkk9wU8nQ/KpZyQPy8NYRTw5fYWfCoOg98cElaU00ZMTBEwA+bssTzdLpe9xPLO/AQ== chris@chris-desktop' > /home/backup-user/.ssh/authorized_keys chown -R backup-user:backup-user /home/backup-user/.ssh chmod 600 /home/backup-user/.ssh/authorized_keyss
Add entry in /etc/sudoers for the created user
#visudo rsyncbackup ALL=NOPASSWD: /usr/bin/rsync
Back on backup server
Copy the backup script in /opt/bin/rsyncbackup.sh
#!/bin/bash if [ $# -ne 2 ] ; then echo "Error: you need to provide 2 parameters, $# given." echo "Syntax: rsyncbackup.sh remote local" echo "Example: rsyncbackup.sh rsyncbackup@ip.add.re.ss:/path/to/source/ /path/to/destination/ (mind the slashes)" echo exit 1 fi CURRENTDATE=`/bin/date +"%F"` #OLDDATE=`/bin/date --date="2 days ago" +"%F"` SOURCE=`echo $1` DEST=$2 echo "source=$SOURCE" INPROGRESS=${DEST}inprogress LATEST=${DEST}latest if [ -d $INPROGRESS ] ; then echo `date +"%F %T"` " : Directory $INPROGRESS already exists - is a previous backup still running?" echo `date +"%F %T"` " : Directory $INPROGRESS already exists - is a previous backup still running?" | /usr/bin/mail -s "Backup of $SOURCE failed. Directory $INPROGRESS already exists - is a previous backup still running?" example@email.com exit 1 fi echo `date +"%F %T"` " : Started rsyncing to ${DEST}${CURRENTDATE}." echo "source=$SOURCE" /usr/bin/rsync --old-compress -rlptD --numeric-ids --hard-links --inplace --acls --xattrs --rsync-path "/usr/bin/sudo /usr/bin/rsync" --link-dest "${DEST}latest" --old-compress ${SOURCE} ${DEST}inprogress RSYNCERROR=$? if [ $RSYNCERROR -ne 0 ] ; then echo `date +"%F %T"` " : Rsync to ${DEST}inprogress exited with non-null status. Exiting..." echo `date +"%F %T"` " : Rsync to ${DEST}inprogress exited with non-null status. Exiting..." | /usr/bin/mail -s "Backup of $SOURCE failed" example@email.com exit 1 fi /bin/mv ${DEST}inprogress ${DEST}${CURRENTDATE} /bin/rm ${DEST}latest /bin/ln -s ${DEST}${CURRENTDATE} ${DEST}latest #/bin/rm -r ${DEST}${OLDDATE} echo `date +"%F %T"` " : Finished rsyncing to ${DEST}${CURRENTDATE}." exit 0
And make it executable
chmod +x /opt/bin/rsyncbackup.sh
Create the directories where the backups will be saved
mkdir -p /dir/for/the/backup
Create a file /etc/cron.d/rsyncbackup and set the backup
# Minute Hour Day of Month Month Day of Week User Command # (0-59) (0-23) (1-31) (1-12 or Jan-Dec) (0-6 or Sun-Sat) 00 00 * * * root /opt/bin/rsyncbackup.sh rsyncbackup@ta.rg.et.ip:/path/to/source /path/to/destination/ >> /var/log/replication.log
Make it executable
chmod +x /etc/cron.d/rsyncbackup
Proxy
If you can't connect directly to the server that needs to be backed up and need to use a proxy, replace the rsync command from the above script with this one
/usr/bin/rsync --old-compress -rlptD --numeric-ids --hard-links --inplace --acls --xattrs --rsync-path "/usr/bin/sudo /usr/bin/rsync" --link-dest "${DEST}latest" --old-compress -e 'ssh -o "ProxyCommand ssh -A backup-user@<proxy-ip> -W %h:%p"' ${SOURCE} ${DEST}inprogress
And of course make sure there is a backup-user on the proxy with the previously generated public key.