Golfreeze.packetlove.com: Life style of Golfreeze Canon400D Family kammtan.com Jazz Freebsd Unix Linux System Admin guitar Music
All about unix linux freebsd and FAQ for Packetlove.com Web hosting , Mail hosting , VoIP + IP PBX server => all application on unix knowledges by golfreeze => Topic started by: golfreeze on มกราคม 24, 2011, 11:35:50 am
-
today I would like to show how to use "rsync" in server and client
อิอิ เริ่มต้นด้วยอังกฤษ หน่อยครับ จะได้ฝึกภาษา ด้วย พอดีวันนี้ นั่งเล่นทำ backup ข้อมูลให้
igetweb.com โดยใช้ rsync มาช่วยครับ ซึ่งตัว rsync จะดีกว่า พวก scp ก็คือว่า ถ้าฝั่ง server
มีการลบไฟล์อะไร หรือเพิ่มไฟล์เข้ามามันก็ทำการ sync ให้เรา ดังใจเรา ปราถนา และทำให้ file นั้นสดๆ ใหม่
อีกด้วยอิอิ
เริ่มต้นฝั่ง server ผมใช้เป็น Debian 4.0 ครับ
แล้วฝั่ง client เป็น Freebsd
เริ่มฝั่ง server โดย
ต้องการ syncronize ไดเรคทอรี่ /home/source ของเครื่อง server1.xxx.com
มายังไดเรคทอรี่ /home/dest ของเครื่อง mirror.xxx.com
ทำที่ทั้งสองเครื่อง server1.xxx.com และ mirror.xxx.com
ติดตั้งและปรับแต่ง rsync
# aptitude install rsync
# vi /etc/default/rsync
RSYNC_ENABLE=true
# dpkg-reconfigure rsync
ทำที่เครื่อง server1.example.com
เพิ่มผู้ใช้ชื่อ test
server1:# useradd -m -s /bin/bash test
( -m คือให้คัดลอกรูปแบบจากไดเรคทอรี่ /etc/skel/
-s คือให้ใช้เชลล์คือ /bin/bash )
ทำที่เครื่อง mirror.xxx.com
ทำการคัดลอก
mirror:# rsync -avz -e ssh test@server1.example.com:/home/source/ /home/dest/
<<<--- ใส่ค่า password ของ test
rsync จะทำการคัดลอกไฟล์ทั้งหมดใน /home/source ที่ test มีสิทธิในการอ่านทั้งหมด
มาที่ /home/dest ของเครื่อง mirror
หมายเหตุ
ตรวจสอบเนื้อที่การใช้ไฟล์ด้วยคำสั่ง
# cd /var/www
# du -c | grep total
Ref site : http://www.thaitux.info/node/94
-
สำหรับฝั่ง client
Freebsd ครับ
#cd /usr/ports/net/rsync
#make config ดูค่าหน่อย ผมเลือกตาม default เลยครับ
#make install clean
เสร็จแล้วก็ไปเพิ่ม ใน rc.conf ดังนี้
#vi /etc/rc.conf
#Rsync step by golfreeze
rsyncd_enable="YES"
สั่งให้มัน start rsync
#/usr/local/etc/rc.d/rsync start
จัดการลอง sync ตามนี้ครับ
#/usr/local/bin/rsync -avz -e ssh test@server1.example.com:/home/source/ /home/dest/
ถ้าจะให้ดี กันเวลาเน็ตหลุด ก็ลง screen ไปอีกตัวน่ะครับ แล้วเวลาใช้งาน rsync ก็เข้าผ่าน screen ก่อน
#cd /usr/ports/sysutils/screen
#make install clean
#cp /usr/local/sbin/screen /usr/sbin/.
#screen
แล้วเรียกใช้ rsync ตาม command
#/usr/local/bin/rsync -avz -e ssh test@server1.example.com:/home/source/ /home/dest/
เท่านี้ เน็ตหลุด แต่ rsync ไม่หลุด คร๊าบๆๆๆๆๆ
หรือถ้าจะทำการ rsync ผ่าน port ที่ไม่ใช่ port (22) ก็
#rsync -avpog --delete --exclude '/home/test' -e 'ssh -p22999' root@192.168.0.1:/home/source/ /home/dest/
อิอิ
golfreeze[at]packetlove.com
http://www.weloveunix.com (http://www.weloveunix.com)
-
ทำ rsync แบบไม่ต้องถาม password ครับ
ปกติ ถ้าจะใช้ function auto password ต้องเป็นพวก rsh ครับ
ใช้งานได้เลย
#rsync --password-file=pass blah blah
ส่วนถ้าใครใช้ผ่าน ssh มันต้องถาม password อยู่แล้วครับ แม้จะใส่ option --password-file
เราสามารถแก้ปัญหาโดยการ gen key แล้วส่งไปเครื่องปลายทางได้ครับดังนี้
เช่นผมจะใช้คำสั่ง rsync จากเครื่อง B(CentOS) ให้โยนไฟล์ไป เก็บไว้ที่ เครื่อง A(debian) ทำได้ดังนี้
ทำการ gen key ที่เครื่อง A (Debian)
#ssh-keygen -t rsa
Enter ค่า default ไปครับ สองครั้ง
ระบบจะทำการ gen file 2 file ให้ดังนี้
id_rsa = private key
id_rsa.pub = public key
ทำการ copy file id_rsa.pub ไปที่เครื่อง B ดังนี้
scp ~/.ssh/id_rsa.pub noisy:.ssh/authorized_keys
แล้วทำการ สั่ง rsync อีกรอบ คราวนี้มันก็จะไม่ถาม password แล้วครับ
BCentOS#rsync -avz -e ssh /home/source/ test@serverA.debian.com:/home/destination/
-
ติดตั้ง rsync และ ssh
# aptitude install rsync ssh
สร้างกุญแจให้กับ ssh
# ssh-keygen -t dsa
Enter file in which to save the key (/root/.ssh/id_dsa): <<<--- [ENTER]
Enter passphrase (empty for no passphrase): <<<--- [ENTER]
Enter same passphrase again: <<<--- [ENTER]
Your identification has been saved in /root/.ssh/id_dsa.
Your public key has been saved in /home/user1/.ssh/id_dsa.pub.
The key fingerprint is:
cd:43:9b:3a:b1:60:01:ae:a2:0e:f8:00:21:8c:d8:f0 root@server2
คัดลอกกุญแจไปยัง server1
# ssh-copy-id -i /root/.ssh/id_dsa.pub root@server1
ต่อเข้า server1 เพื่อบันทึกรหัสผ่าน 1 ครั้ง
# ssh server1 -l root
The authenticity of host 'server1 (192.168.1.1)' can't be established.
RSA key fingerprint is 1a:d1:12:f4:bd:d4:4c:11:93:55:9c:75:a7:eb:7d:ae.
Are you sure you want to continue connecting (yes/no)? <<<--- yes
Warning: Permanently added 'server1,192.168.1.1' (RSA) to the list of known hosts.
root@server1's password: <<<--- ROOT@SERVER1-PASSWORD
Now try logging into the machine, with "ssh 'root@server1'";, and check in:
.ssh/authorized_keys
to make sure we haven't added extra keys that you weren't expecting.
#
ต่อเข้าจริงอีก 1 ครั้ง
# ssh root@server1
Last login: Mon Mar 3 21:02:28 2008 from work1.example.com
Linux server1 2.6.18 #1 Mon Mar 3 13:02:29 ICT 2008 i686
The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.
Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
No mail.
# exit
(***อย่าลืม exit ออกจาก server1 ด้วยนะครับ***)
เสร็จเรื่อง ssh
ต่อเรื่องทำ rsync
สร้างไดเรกทอรีมารองรับไฟล์จาก server1 สมมุติว่าให้ชื่อ /sys2/server1-sysb
# mkdir -p /sys2/server1-sysb
สร้างไฟล์ d.cron-rsync-server1 ใน /usr/local/sbin
# vi /usr/local/sbin/d.cron-rsync-server1
#!/bin/bash
# IF sys2 IS SEPARATE, MOUNT /sys2 FIRST
#mount /sys2
# RSYNC FROM server1:/sys1/sysb TO /sys2/server1-sysb
rsync -aq --delete -e "ssh -i /root/.ssh/id_dsa"\
root@server1.example.com:/sys1/sysb/ /sys2/server1-sysb/
# IF sys2 IS SEPARATE, MOUNT /sys2 FIRST
#umount /sys2
ทำให้รันได้
# chmod 700 /usr/local/sbin/d.cron-rsync-server1
ตั้ง cron ให้รันตอนตี 1
# crontab -e
...
#BACKUP server1:/sys1/sysb TO /sys2/server1-sysb DAILY
20 1 * * * /usr/local/bin/d.cron-rsync-server1
-
ทำ rsync แบบไม่ต้องถาม password ครับ
ปกติ ถ้าจะใช้ function auto password ต้องเป็นพวก rsh ครับ
ใช้งานได้เลย
#rsync --password-file=pass blah blah
ส่วนถ้าใครใช้ผ่าน ssh มันต้องถาม password อยู่แล้วครับ แม้จะใส่ option --password-file
เราสามารถแก้ปัญหาโดยการ gen key แล้วส่งไปเครื่องปลายทางได้ครับดังนี้
เช่นผมจะใช้คำสั่ง rsync จากเครื่อง A(debian) user=testroot ให้ไป sync file จาก B(centOS) ทำได้ดังนี้
gen key ที่เครื่อง A (debian)
debianA>ssh-keygen -t rsa
Enter ค่า default ไปครับ สองครั้ง
ระบบจะทำการ gen file 2 file ให้ดังนี้
id_rsa = private key
id_rsa.pub = public key
ทำการ copy file id_rsa.pub ไปที่เครื่อง B ดังนี้
debianA#scp /home/testroot/.ssh/id_rsa.pub serverB@/root/.ssh/authorized_keys
แล้วทำการ สั่ง rsync อีกรอบ คราวนี้มันก็จะไม่ถาม password แล้วครับ
debianA>/usr/local/bin/rsync -avz -e ssh root@serverB:/home/source/ /home/dest/
เวลา sync ข้อมูลมาแล้ว ข้อมูล /source จะไปอยู่ใน /home/dest/source นะครับผม
-
ถ้าในกรณี เราต้องการทำ rsync โดยที่ไม่การ sync บาง folder ในที่นี้ผมไม่ต้อง folder "tmp/pop" ในเครื่องต้นทาง (119.22.44.55)
ให้ sync มาที่ folder "/home/daily_backup" ในเครื่องปลายทาง
ก็สามารถทำการรัน command rsync "--exclude 'folder' " ดังข้างล่างนี้ ที่เครื่อง ปลายทาง ได้ดังนี้
#rsync -avpog --exclude 'tmp/pop' -e ssh test@119.22.44.55:/home /home/daily_backup/.
และถ้าต้องการที่จะ ลบไฟล์ ที่ไม่มีอยู่ในต้นทาง และให้อัฟเดทไปยังปลายทางด้วย ก็เพิ่ม --delete เข้าไปนะครับ
#rsync -avpog --delete --exclude 'tmp/pop' -e ssh test@119.22.44.55:/home /home/daily_backup/.
-
เปลียน port rsync เป็น port 22999
หรือถ้าจะทำการ rsync ผ่าน port ที่ไม่ใช่ port (22) ก็
#rsync -avpog --delete --exclude '/home/test' -e 'ssh -p22999' root@192.168.0.1:/home/source/ /home/dest/
-
ในกรณีจะให้ rsync โดยไม่ถามพาส
โดยทำการ rsync file จากเครื่อง serverA มาที่เครื่อง serverB
โดย สคิปจะเรียกรันจากเครื่อง serverB แล้ว connect ไปเก็บไฟล์ในเครื่อง serverA มาไว้ที่เครื่อง serverB
ให้ตรวจสอบว่า รันคอมมาน rsync ผ่าน user อะไร เช่น user=root หรือ user ธรรมดาทั่วไป
หลังจากนั้นต้องทำการ generate public key ที่เป็น rsa หรือ dsa ที่มีขนาดkey lenght 2048 ครับเพื่อความปลอดภัย ใน user นั้นๆโดย ถ้ารันผ่าน user root
serverB#ssh-keygen -t rsa -b2048
serverB#less /root/.ssh/id_rsa.pub
tranfer public key to account "test1" at serverA kub.
serverA#vi /home/test1/.ssh/authorized_keys
หลังจากนั้นเทสดูครับ run rsync จาก user=root ในเครื่อง B เพื่อไปเก็บไฟล์ใน เครื่อง server A ให้ใส่พาสครั้งแรกก่อน แล้วลองรันดูอีกรอบนะครับ ก็จะไม่ถามพาสครับผม
serverB#rsync -avpog --delete test1@serverA:/home/source/ /home/dest/.
-
เราสามารถประยุกต์ใช้ ssh command send to remote host ได้นะครับ
ในกรณี เราทำเรื่อง authentication via public key เรียบร้อยแล้ว เราสามารถสั่งให้ เครื่องต้นทาง run ssh command ที่ฝั่ง remote host ได้ดังนี้
ssh -t -p22 testssh2@203.86.x.5 'ls /home'
ก็จะเป็นการ ls /home ที่เครื่อง 203.86.x.5
แล้วเราก็สามารถสั่งให้ไปรัน shell script ในเครื่อง 203.86.x.5 ได้ดังนี้
ssh -t -p22 testssh2@203.86.x.5 '/home/testssh2/testscript.sh'
เท่านี้เองครับผม : )