Създаване на резервни копия и прехвърляне на друг сървър чрез ssh ключове

В тази статия ще покажем прост начин за създаване на резервно копие на файлове от server1 на backupserver.

На server1 създаваме ssh двойка публичен/частен ключ с празна парола, чрез който потребителя root да се логва на backupserver без парола:

[root@server1 ~]# ssh-keygen 
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa): /root/.ssh/backups_key
Created directory '/root/.ssh'.
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /root/.ssh/backups_key.
Your public key has been saved in /root/.ssh/backups_key.pub.
The key fingerprint is:
31:d9:4d:10:5f:b1:3d:98:8f:7b:69:db:36:6e:ab:4c root@server1
[root@server1 ~]# cat .ssh/backups_key.pub 
ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAvbvP+5AT9KJKBgzgaHc9gspuUycBzquQ2Mr6ngIC+QOzk9SVEbmUlQHPXr8VqM0N3KXlP4wpo14gCl1r2NhZLBpHRC5iWJF8eOQeeeEM9a3ulDAPMkL6M/YsupdLkdIrokxdqijiWjvnNebx0BvdsQyLjvqKf1dmxz4jmDvvoKHKYL/kqZ/Pcvku5D4Y/5L15MXZXl2CkPZJ4eVHdn0K5Hhvfn/OKWXxblqfOJ6AEkTIfKbDhhil6sm9BxxrSCYzi1Px1CNLPv6u44IfRvLeNH/V9Bvyd0Yh8yhssYkYrxBLuLVSZwSGUPjs8MkBh8TOIhSwF+VWXjbhI7IPnxhhQQ== root@server1


На backupserver създаваме потребител backups1 с домашна директория /backups/server1, където ще се съхраняват архивите от server1:

[root@backupserver ~]# useradd backups1 -d /backups/server1 


Добавяме публичният ключ от по-горе към файла ~/.ssh/authorized_keys на новосъздадения потребител (ако е необходимо го създаваме с необходимите права):

[root@backupserver ~]# su - backups1
[backups1@backupserver ~]$ mkdir -p ~/.ssh
[backups1@backupserver ~]$ chmod 700 ~/.ssh
[backups1@backupserver ~]$ echo "ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAvbvP+5AT9KJKBgzgaHc9gspuUycBzquQ2Mr6ngIC+QOzk9SVEbmUlQHPXr8VqM0N3KXlP4wpo14gCl1r2NhZLBpHRC5iWJF8eOQeeeEM9a3ulDAPMkL6M/YsupdLkdIrokxdqijiWjvnNebx0BvdsQyLjvqKf1dmxz4jmDvvoKHKYL/kqZ/Pcvku5D4Y/5L15MXZXl2CkPZJ4eVHdn0K5Hhvfn/OKWXxblqfOJ6AEkTIfKbDhhil6sm9BxxrSCYzi1Px1CNLPv6u44IfRvLeNH/V9Bvyd0Yh8yhssYkYrxBLuLVSZwSGUPjs8MkBh8TOIhSwF+VWXjbhI7IPnxhhQQ== root@server1" >> ~/.ssh/authorized_keys
[backups1@backupserver ~]$ chmod og-w ~/.ssh/*
Сега всичко би трябвало да е готово. Правим пробен опит за логване от server1 на backupserver:
[root@server1 ~]# ssh -i ~/.ssh/backups_key -l backups1 backupserver 
[backups1@backupserver ~]$


Следващата стъпка е да се напише прост скрипт за създаване на резервно копие. Той ще чете файловете/директориите за архивиране от обикновен файл - backup-items.txt. Ето и съдържанието на backup.sh:

#!/bin/bash

# файл с обектите за архивиране
ITEMS_FILE="/root/backup-items.txt"
# място за създаване на временния архив
TMP_DIR=/tmp
# името на сървърът, на който се съхраняват архивите
REMOTE_HOST=backupserver
# потребителят на сървърът с архивите
REMOTE_USER=backups1
# частният ssh ключ
REMOTE_KEY=/root/.ssh/backups_key
# мястото на сървърът с архивите, където се копират новите резервни копия
REMOTE_PATH=/backups/server1
log_line () {
    log_time=`date`
    echo "[${log_time}] $@"
}
fail_script () {
    log_line $@
    exit 1
}
log_line "Започнат е процес на архивиране"

archive_date=`date "+%F-%H-%M-%S"`
archive_name="${TMP_DIR}/${archive_date}.tar.gz"
log_line "Създаване на архива $archive_name от следните обекти:"
cat $ITEMS_FILE
tar -zc -T $ITEMS_FILE -f $archive_name || fail_script "Грешка при създаване на архив"

log_line "Архивът е създаден, прехвърляне на $REMOTE_HOST"
scp -i $REMOTE_KEY $archive_name $REMOTE_USER@$REMOTE_HOST:$REMOTE_PATH || fail_script "Грешка при прехвърляне на архива"
log_line "Архивът е прехвърлен, изтриване на локалното копие"
rm -f $archive_name || fail_script "Грешка при изтриване на локалното копие"
log_line "Архивирането е приключено"

Добавяме няколко примерни директории в backup-files.txt:

/etc
/root


Добавяме следният ред в crontab-а на root на server1:

3 3 * * * /bin/bash /root/backup.sh


Това е всичко. Всяка нощ в 03:03 архив на /etc и /root ще бъде изпращан на backupserver.

Няма коментари

Обратно към списъка със статиите

Тази страница последно е променяна на 2024-04-29 02:48:26