เดี๋ยวนี้อะไรๆก็ Sync ข้อมูลกันหมด เช่น Android เมื่อเราตั้งค่าอะไรไว้ในเครื่องแท็บเบล็ต หรือโทรศัพท์มือถือของเรา จะมีการ Sync ข้อมูลที่เราตั้งไว้ไปที่ Google หลายๆโปรแกรมก็ใช้หลักการเดียวกันนี้ เอาข้อมูลของเราไปเก็บไว้ เรียกว่าให้ความสะดวกแก่เรา แต่ในทางกลับกัน ก็ดึงเอาความเป็นส่วนตัวของเราไปเก็บไว้เป็นตัวประกันด้วย
วัน นี้ผมก็เลยอยากเสนอ การ Sync ข้อมูลของเราไปเก็บไว้ในที่ของเราเอง เช่น ผมมีเครื่อง Notebook และ Desktop ใช้งานกันอยู่ประจำ และจะต้องมีการ copy ข้อมูลกันอยู่ตลอด ปกติผมก็ใช้โปรแกรมช่วย copy อย่าง FileZilla ซึ่งเป็นโปรแกรม Open Source มีใช้งานได้ทั้งบน Linux และ Windows ก็สะดวกดีครับ หรืออีกโปรแกรมหนึ่งที่ผู้ใช้ Linux นิยมกันมาก นั่นก็คือ rsync หรือ Grsync (เป็น Gnome GUI) น่าใช้ไม่แพ้กัน โปรแกรม rsync นี้ เหมาะกับการ Sync ข้อมูลเป็นประจำมากกว่า คือ เราสามารถระบุ folder ที่ต้องการ Sync ระหว่างต้นทางกับปลายทาง แล้วทุกอย่าง rsync จะจัดการให้ ดังนั้น rsync จึงเหมาะกับการทำ backup ประจำนั่นเอง
แต่ เมื่อไม่นานมานี้ ผมมีความต้องการให้เครื่องของผม Sync ข้อมูลกันอัตโนมัติิ ผมก็เลยต้องพึ่งพาความสามารถของ cron หรือ crontab ซึ่งเป็นโปรแกรมที่จะคอยเรียกโปรแกรมมาทำงานตามคำสั่งที่เราตั้งไว้ ตามเวลาที่กำหนด เมื่อเอาคำสั่ง rsync ไปใส่ไว้ใน crontab ตรงๆ ปรากฏว่า ไม่ได้ผลครับ เช็คไป เช็คมา ปรากฏว่า เมื่อเรา remote Sync ไปยังอีกเครื่องหนึ่ง จะมีการถาม username/password แต่ cron เรียก rsync ให้ทำงานอยู่เบื้องหลัง เราก็เลยป้อน username/password ไม่ได้ หรือถ้าได้ เราก็คงไม่มารอป้อน username/password ทุกครั้งเป็นแน่ ไม่อย่างนั้น จะเรียกว่า อัตโนมัติได้ไงล่ะ
ผมก็เลยเดือดร้อน ต้องหาวิธีที่จะให้ rsync ทำงานได้โดยไม่ต้องป้อน username/password ซึ่งก็มีคนแนะนำไว้ใน internet วิธีแรกคือ การเรียก rsync ในโหมด daemon ซึ่งจะต้องมีการ เซ็ตค่าหลายๆอย่าง รวมทั้งการเก็บ password ไว้ในไฟล์ๆหนึ่ง ซึ่งเราจะต้องป้องกันไฟล์นี้ให้ดีๆ ไม่อย่างนั้น อาจจะเป็นช่องโหว่ให้คนอื่นมาเห็น password ของเราได้ แต่ทำไปทำมา สุดท้าย ก็ไม่สำเร็จครับ อาจจะเป็นเพราะ จะต้องเปิด port 873 ไว้เป็น default port ของ rsync daemon หรือการเซ็ตต่า /etc/rsync.conf ไม่ถูกก็แล้วแต่ สรุปว่า ไม่สำเร็จ และไม่น่าจะเป็นทางออกที่ดี เพราะมันค่อนข้างซับซ้อน
อีก วิธีหนึ่งคือการใช้ความสามารถของ ssh ซึ่งเป็น default shell ของ rsync ที่ใช้ในการติดต่อกับ remote อยู่แล้ว โดยเราจะต้องสร้าง key ไว้ใน folder .ssh ของเรา ด้วยโปรแกรม ssh-keygen ดังนี้
หมายเหตุ ไม่ต้องกำหนด passphrase คือให้กด Enter ผ่านไปเลย
จาก นั้นให้ copy public key ซึ่งก็คือไฟล์ id_rsa.pub ไปไว้ที่ folder .ssh ของเครื่อง remote แต่ให้ตั้งชื่อเป็น authorize_keys เช่น
เมื่อ copy เรียบร้อยแล้ว อาจจะทดลองสั่ง rsync ดู จะพบว่า โปรแกรมสามารถ Sync ได้ทันที โดยไม่ต้องป้อน username/password เช่น
เมื่อ ทุกอย่างเรียบร้อยดี ไม่มีปัญหา ก็สามารถเอาคำสั่งนี้ไปตั้งเวลาใน cron ได้ โดยสั่ง crontab -e จะปรากฏไฟล์ให้แก้ไข ซึ่งสามารถกำหนด นาที, ชั่วโมง, วันที่, เดือน, วันในสัปดาห์, คำสั่ง ดังนี้
ตัวอย่างข้างบนนี้ เป็นการตั้งให้ Sync ข้อมูลใน folder eBooks ทุกวัน เวลาเที่ยงคืน
วัน นี้ผมก็เลยอยากเสนอ การ Sync ข้อมูลของเราไปเก็บไว้ในที่ของเราเอง เช่น ผมมีเครื่อง Notebook และ Desktop ใช้งานกันอยู่ประจำ และจะต้องมีการ copy ข้อมูลกันอยู่ตลอด ปกติผมก็ใช้โปรแกรมช่วย copy อย่าง FileZilla ซึ่งเป็นโปรแกรม Open Source มีใช้งานได้ทั้งบน Linux และ Windows ก็สะดวกดีครับ หรืออีกโปรแกรมหนึ่งที่ผู้ใช้ Linux นิยมกันมาก นั่นก็คือ rsync หรือ Grsync (เป็น Gnome GUI) น่าใช้ไม่แพ้กัน โปรแกรม rsync นี้ เหมาะกับการ Sync ข้อมูลเป็นประจำมากกว่า คือ เราสามารถระบุ folder ที่ต้องการ Sync ระหว่างต้นทางกับปลายทาง แล้วทุกอย่าง rsync จะจัดการให้ ดังนั้น rsync จึงเหมาะกับการทำ backup ประจำนั่นเอง
แต่ เมื่อไม่นานมานี้ ผมมีความต้องการให้เครื่องของผม Sync ข้อมูลกันอัตโนมัติิ ผมก็เลยต้องพึ่งพาความสามารถของ cron หรือ crontab ซึ่งเป็นโปรแกรมที่จะคอยเรียกโปรแกรมมาทำงานตามคำสั่งที่เราตั้งไว้ ตามเวลาที่กำหนด เมื่อเอาคำสั่ง rsync ไปใส่ไว้ใน crontab ตรงๆ ปรากฏว่า ไม่ได้ผลครับ เช็คไป เช็คมา ปรากฏว่า เมื่อเรา remote Sync ไปยังอีกเครื่องหนึ่ง จะมีการถาม username/password แต่ cron เรียก rsync ให้ทำงานอยู่เบื้องหลัง เราก็เลยป้อน username/password ไม่ได้ หรือถ้าได้ เราก็คงไม่มารอป้อน username/password ทุกครั้งเป็นแน่ ไม่อย่างนั้น จะเรียกว่า อัตโนมัติได้ไงล่ะ
ผมก็เลยเดือดร้อน ต้องหาวิธีที่จะให้ rsync ทำงานได้โดยไม่ต้องป้อน username/password ซึ่งก็มีคนแนะนำไว้ใน internet วิธีแรกคือ การเรียก rsync ในโหมด daemon ซึ่งจะต้องมีการ เซ็ตค่าหลายๆอย่าง รวมทั้งการเก็บ password ไว้ในไฟล์ๆหนึ่ง ซึ่งเราจะต้องป้องกันไฟล์นี้ให้ดีๆ ไม่อย่างนั้น อาจจะเป็นช่องโหว่ให้คนอื่นมาเห็น password ของเราได้ แต่ทำไปทำมา สุดท้าย ก็ไม่สำเร็จครับ อาจจะเป็นเพราะ จะต้องเปิด port 873 ไว้เป็น default port ของ rsync daemon หรือการเซ็ตต่า /etc/rsync.conf ไม่ถูกก็แล้วแต่ สรุปว่า ไม่สำเร็จ และไม่น่าจะเป็นทางออกที่ดี เพราะมันค่อนข้างซับซ้อน
อีก วิธีหนึ่งคือการใช้ความสามารถของ ssh ซึ่งเป็น default shell ของ rsync ที่ใช้ในการติดต่อกับ remote อยู่แล้ว โดยเราจะต้องสร้าง key ไว้ใน folder .ssh ของเรา ด้วยโปรแกรม ssh-keygen ดังนี้
ssh-keygen -b 1024 -t rsa -f .ssh/id_rsa
หมายเหตุ ไม่ต้องกำหนด passphrase คือให้กด Enter ผ่านไปเลย
จาก นั้นให้ copy public key ซึ่งก็คือไฟล์ id_rsa.pub ไปไว้ที่ folder .ssh ของเครื่อง remote แต่ให้ตั้งชื่อเป็น authorize_keys เช่น
scp .ssh/id_rsa.pub somchai@x.y.z:~/.ssh/authorized_keys
เมื่อ copy เรียบร้อยแล้ว อาจจะทดลองสั่ง rsync ดู จะพบว่า โปรแกรมสามารถ Sync ได้ทันที โดยไม่ต้องป้อน username/password เช่น
rsync -r -t -p -o -g -v --progress --delete -c -l -z somchai@x.y.z:~/eBooks/ /home/somchai/eBooks/
เมื่อ ทุกอย่างเรียบร้อยดี ไม่มีปัญหา ก็สามารถเอาคำสั่งนี้ไปตั้งเวลาใน cron ได้ โดยสั่ง crontab -e จะปรากฏไฟล์ให้แก้ไข ซึ่งสามารถกำหนด นาที, ชั่วโมง, วันที่, เดือน, วันในสัปดาห์, คำสั่ง ดังนี้
# m h dom mon dow command 0 0 * * * rsync -r -t -p -o -g -v --progress --delete -c -l -z /home/somchai/eBooks/ somchai@x.y.z:~/eBooks/
ตัวอย่างข้างบนนี้ เป็นการตั้งให้ Sync ข้อมูลใน folder eBooks ทุกวัน เวลาเที่ยงคืน
ไม่มีความคิดเห็น:
แสดงความคิดเห็น