Hiển thị các bài đăng có nhãn rsync. Hiển thị tất cả bài đăng
Hiển thị các bài đăng có nhãn rsync. Hiển thị tất cả bài đăng

Chủ Nhật, 6 tháng 7, 2014

Copy dữ liệu lên/từ server qua ssh

Với một system admin đây là hoạt động rất hay gặp. Để thực hiện được bạn có hai cách:
- Dùng scp
- Dùng rsync qua ssh

Cách 1: Tôi dùng scp
Copy lên server
scp <username>@<server ip>:/home/<username> <file>

Copy từ server về thư mục hiện tại
scp <username>@<server ip>:/home/<username>/<file> .

Cách 2: Tôi dùng rsync qua ssh
Copy lên server
rsync -avz <file> -e "ssh -l <username>" <server ip>:/home/<username>

Copy từ server về thư mục hiện tại
rsync -avz -e "ssh -l <username>" <server ip>:/home/<username>/<file> .

Thứ Bảy, 21 tháng 6, 2014

Mirror site dùng rsync - Phần 2

Ở phần trước tôi đã trình bày cách đồng bộ bằng rsync nhưng theo cách thủ công. Bạn không thể hàng phút lại gõ và chạy câu lệnh đó được. Để tự động hóa bạn chỉ cần đặt lịch chạy command. Crontab là ứng dụng đặt lịch phổ biến trên linux. 

Điều chỉnh hồ sơ crontab:
crontab -e

Bổ sung vào cuối hồ sơ:
*/1 * * * * /usr/bin/rsync -avz --delete /usr/local/apache2/htdocs/test/ -e "ssh -i <path to private file>" test@192.168.56.250:/var/www/test/

Ở đây tôi đặt lịch command sau mỗi phút.

Bạn mở syslog:
tail -f /var/log/syslog

Đợi một phút sau thấy log bắn ra thông báo cronjob đã được thực hiện nhưng thực tế là không có gì được đồng bộ cả. Lý do cho hiện tượng này là cron không biết gì về ssh-agent nên nó không thể nói chuyện với ssh-agent được, ssh-agent lại là thành phần quản lý private key, không có private key đồng nghĩa key based authentication không thể hoàn tất.

Để giải quyết vấn đề này, bạn dùng keychain. 
sudo apt-get install keychain

Keychain sẽ cho phép dùng lại ssh-agent và giúp cron nói chuyện được với ssh-agent. Trước tiên cần chạy keychain để nó nhận biết ssh-agent đang hoạt động.
keychain --nogui <path to private key>

Kết quả của lệnh trên là một file $HOME/.keychain/$HOSTNAME-sh được tạo ra. File này chứa hầu hết nội dung của output ssh-agent -s

Cuối cùng bạn chèn thêm vào cronjob một đoạn trỏ đến $HOME/.keychain/$HOSTNAME-sh
*/1 * * * * . $HOME/.keychain/$HOSTNAME-sh; /usr/bin/rsync -avz --delete /usr/local/apache2/htdocs/test/ -e "ssh -i <path to private file>" test@192.168.56.250:/var/www/test/

Chỉnh sửa hồ sơ crontab không yêu cầu restart cron service. Bạn chỉ cần đợi tiếp một phút để thấy kết quả như ý muốn.

Tham khảo: http://www.howtoforge.com/mirroring_with_rsync

Mirror site dùng rsync - Phần 1

rsync là một công cụ đồng bộ trên linux. Công cụ này hỗ trợ đồng bộ chỉ những sai biệt giữa hai directory và cho phép nén dữ liệu khi truyền qua network nên rất tối ưu cho băng thông. Tuy nhiên, các tiện ích xác định sai biệt và nén dữ liệu của nó có thể làm tăng CPU load.

Dữ liệu được truyền đi giữa hai site nằm trên hai máy khác nhau:
192.168.56.1: máy nguồn, /usr/local/apache2/htdocs/test, thư mục nguồn.
192.168.56.250: máy đích, /var/www/test, thư mục đích.

Dữ liệu sẽ được truyền qua tunnel giữa hai máy để đảm bảo tính an toàn. Tôi sẽ thiết lập một
openssh-client trên 192.168.56.1 
openssh-server trên 192.168.56.250
Phương thức xác thực là key based authentication. Cách thiết lập tôi đã có một bài viết nên ở đây tôi sẽ không viết lại.

Thực hiện lệnh trên 192.168.56.1
rsync -avz --delete /usr/local/apache2/htdocs/test -e "ssh -i <path to private file>" test@192.168.56.250:/var/www/test

-a: archive mode
-v: verbose
-z: compress
--delete: chỉ đồng bộ sai biệt giữa hai thư mục nguồn và đích
-e: mở ra một remote shell để đẩy dữ liệu lên qua tunnel ssh

Kết quả câu lệnh sẽ đồng bộ toàn bộ file/dir trong /usr/local/apache2/htdocs/test trên 192.168.56.1 lên /var/www/test trên 192.168.56.250. Chú ý cấp quyền đọc ghi cho user test lên thưc mục /var/www/test.

Tham khảo: http://www.howtoforge.com/mirroring_with_rsync