Hướng dẫn viết script sync dữ liệu giữa 2 VPS linux qua SSH key
Chuẩn bị:
VPS A: Dữ liệu cần chuyển đi.
VPS B: Dữ liệu sẽ chuyển đến đây.
Folder cần chuyển:
VPS A: /backup
sang
VPS B: /backup1
Các bước thao tác
Bước 1: Tạo SSH key trên A và add public key vào B.
Tạo cặp key trên A
ssh-keygen -t rsa -b 4096
Sau khi tạo xong thì dùng lệnh sau để add public key vào B
root@A:~# ssh-copy-id -i /root/.ssh/id_rsa.pub -p <Port SSH của B> root@<IP của B>
Sau đó test bằng lệnh ssh trực tiếp nếu không cần nhập password thì đã add thành công.
root@A:~# ssh -p <Port SSH của B> root@<IP của B>
Bước 2: Tạo script chuyển dữ liệu từ A sang B bắn thông báo về telegram
vi /root/backupserver.sh
#!/bin/bash
# ============================
# Config
# ============================
SRC_DIR="/backup/"
DEST_DIR="/backup1/"
REMOTE_USER="root"
REMOTE_HOST="<IP của B"
REMOTE_PORT="<Port của B>" # nếu port khác thì sửa lại
# Telegram Bot config
BOT_TOKEN="<API bot telegram>"
CHAT_ID="<nhóm chat telegram>"
# ============================
# Sync dữ liệu
# ============================
rsync -avz -e "ssh -p $REMOTE_PORT" "$SRC_DIR" ${REMOTE_USER}@${REMOTE_HOST}:"$DEST_DIR"
STATUS=$?
# ============================
# Gửi thông báo Telegram
# ============================
if [ $STATUS -eq 0 ]; then
MSG="Sync thành công config $(hostname) → ${REMOTE_HOST}
📂 Thư mục: $SRC_DIR → $DEST_DIR
🕒 Thời gian: $(date '+%Y-%m-%d %H:%M:%S')"
else
MSG="❌ Sync thất bại config: $(hostname) → ${REMOTE_HOST}
📂 Thư mục: $SRC_DIR → $DEST_DIR
🕒 Thời gian: $(date '+%Y-%m-%d %H:%M:%S')"
fi
curl -s -X POST "https://api.telegram.org/bot${BOT_TOKEN}/sendMessage" \
-d chat_id="${CHAT_ID}" \
-d text="$MSG" >/dev/null
Phân quyền thực thi cho file backupserver.sh
chmod +x /root/backupserver.sh
Test thử script xem có hoạt động không.
./backupserver.sh
Nếu thành công thì thông báo sẽ bắn về telegram.
Bước 3: Tạo cron backup 2 a.m sáng mỗi ngày
crontab -e
0 2 * * * /root/backupserver.sh >> /var/log/backupserver.log 2>&1