Създаване на резервни копия и прехвърляне на друг сървър чрез 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.
Няма коментари
Обратно към списъка със статиите
Тази страница последно е променяна на 2025-04-30 15:55:47