Sunday, March 8, 2009

Backup Remote Server แบบอัตโนมัติด้วย rsync and ssh

ปฐมบทเริ่มจากวันหนึ่งเห็น admin backup ข้อมูลจาก samba server ที่เปิดแชร์ข้อมูลตั้งอยู่สาขาต่างจังหวัด โดย backup มาเก็บที่เครื่อง backup server ที่สำนักงานใหญ่ บริษัทแห่งนี้มี admin คนเดียว มีสาขาอยู่สองแห่งแต่ละแห่งมี linux เป็นเครื่อง server แต่ว่าการ backup ข้อมูลนั้นให้มารวมศูนย์กันที่สำนักงานใหญ่แห่งเดียว นัยว่าเป็นการประหยัด น้อง admin เปิด OT เกือบทุกวัน ถามว่าทำไม คำตอบคือกว่าจะ backup ข้อมูลเสร็จก็เลยเวลาห้าโมงไปแล้ว จึงได้ถามว่าน้องทำ backup ให้มัน auto ไม่ได้หรือตอนเช้าค่อยมาตรวจสอบเอา น้องบอกว่าไม่ได้ครับ เพราะคำสั่งที่ไปยังเครื่อง remote ผมต้องใส่ username / password ด้วย ผมใช้ rsync ครับ ตอบได้ดีนะ ไหนลองทำคำสั่งให้ดูหน่อยซิ

rsync -avzupog root@192.168.0.10:/home/ /backup/home

คำสั่งก็ประมาณนี้ และต้องรอกรอกพาสเวิร์ด root เสียก่อน อืม แล้วน้องใช้ร่วมกันคำสั่ง ssh เป็นหรือเปล่า ?? ถึงตรงนี้เริ่มงง เห็นทีต้องหาทางช่วยน้องซะหน่อย เปิด OT ทุกวันมีหวังตกงานตาย....

การทำ Auto backup Remote Server ด้วย Rsync

คำสั่งที่ต้องใช้
1. rsync
2. ssh
3. crond

ข้อตกลงร่วมกัน :
สมมติให้เครื่อง samba ที่สาขา มีหมายเลข IP: 192.168.0.10 (ต่อไปจะเรียกสั้น ๆ ว่า rsamba)ไดเรกทอรีที่ต้องการ backup คือ /home ทั้งหมด เครื่อง backup server ที่สำนักงานใหญ่มีหมายเลข IP: 192.168.1.10 (ต่อไปจะเรียกว่า hbackup) ไดเรกทอรีที่เก็บข้อมูลจากการ backup คือ /backup/home

ขั้นตอนที่ 1 : สร้าง key เพื่อให้ ssh ทั้งสองฝั่งตรวจสอบโดยไม่ต้องถามพาสเวิร์ด

ที่ hbackup server พิมพ์คำสั่ง

ssh-keygen -t dsa -b 1024 -f /root/remote-rsync-key

Generating public/private dsa key pair.
Enter passphrase (empty for no passphrase): [กด enter ผ่านเลย]
Enter same passphrase again: [กด enter ผ่าน]
Your identification has been saved in /root/remote-rsync-key.
Your public key has been saved in /root/remote-rsync-key.pub.
The key fingerprint is:
2e:28:d9:ec:85:21:e7:ff:73:df:2e:07:78:f0:d0:a0 thisuser@thishost


สองไฟล์จะถูกสร้างขึ้นมาใน /root

ขั้นตอนที่ 2 : copy ไฟล์ ไปไว้ที่เครื่อง rsamba ที่นี้จะใช้คำสั่ง scp

scp /root/remote-rsync-key.pub root@192.168.0.10:/root/

ขั้นตอนที่ 3 : ย้ายไปที่ rsamba และสร้างไฟล์และไดเรกทอรีเพื่อตรวจสอบการติดต่อด้วย key ที่สร้างนี้

ssh root@192.168.0.10

สร้างไดเรกทอรี .ssh ใน /root ( ถ้ามีแล้วไม่ต้องสร้าง ) ด้วยคำสั่ง
if [ ! -d .ssh ]; then mkdir .ssh ; chmod 700 .ssh ; fi
mv remote-rsync-key.pub .ssh
cd .ssh/
if [ ! -f authorized_keys ]; then touch authorized_keys ; chmod 600 authorized_keys ; fi
cat remote-rsync-key.pub >> authorized_keys


จบขั้นตอนนี้เครื่อง rsamba ก็พร้อมจะรับการคอนเนคเข้ามาโดยไม่ต้องใช้ username แล้ว ทดสอบด้วยคำสั่งที่ hbackup

ssh -i /root/remote-rsync-key root@192.168.0.10

ถ้าผ่านเข้าไปได้ โดยไม่ถามพาสเวิร์ด คราวนี้ลองคำสั่ง rsync ดูอีกครั้ง

rsync -avz -e "ssh -i /root/remote-rsync-key" root@192.168.0.10:/home /backup/home

ขั้นตอนที่ 4 : สร้าง Cron Job

สร้าง script file ชื่อ rsync-remotehost-backups สำหรับการ backup

#!/bin/sh

RSYNC=/usr/bin/rsync
SSH=/usr/bin/ssh
KEY=/root/remote-rsync-key
RUSER=root
RHOST=192.168.0.10
RPATH=/home
LPATH=/backup/home/
$RSYNC -az -e "$SSH -i $KEY" $RUSER@$RHOST:$RPATH $LPATH


ใช้คำสั่ง crontab -e เพื่อบรรจุ script คำสั่งนี้เข้าไปในตารางงานของ crond

0 5 * * * /bin/rsync-remotehost-backups

ก่อนจบต้องขอบคุณ http://troy.jdmz.net/rsync/index.html เป็นต้นแบบของวิธีการนี้

เพิ่มเติม :
How to do remote backup with tar and ssh ?

0 comments:

Twitter Delicious Facebook Digg Stumbleupon Favorites More