Ở 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
Hiển thị các bài đăng có nhãn ssh. Hiển thị tất cả bài đăng
Hiển thị các bài đăng có nhãn ssh. Hiển thị tất cả bài đăng
Thứ Bảy, 21 tháng 6, 2014
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
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
Thứ Năm, 19 tháng 6, 2014
Cấu hình ssh key based authentication
Để đăng nhập từ xa vào một server qua ssh bạn có hai cách để xác thực:
- passwd based
- key based
Với passwd based, bạn cần phải ghi nhớ passwd. SSH là giao thức an toàn nên bạn không lo passwd bị truyền clear text qua network
Với key based, bạn không cần passwd, thay vì passwd bạn sẽ dùng một cặp public và private key để truyền thông giữa client và server. Client sẽ giữ private key và mã hóa thông điệp còn public key sẽ nằm trên server dùng để giải mã thông điệp
Các bước thực hiện
Tại client:
Tạo một cặp private và public key. PKI có hai loại giải thuật chính là rsa và dsa. Hiện tại dsa được sử dụng phổ biến hơn.
ssh-keygen -b 1024 -t dsa
Một cặp id_dsa và id_dsa.pub được tạo ra. Bạn cất giữ id_dsa trong ~/.ssh
và set quyền truy cập đến ~/.ssh/id_dsa là 400 còn thư mục ~/.ssh bạn set quyền 700
Vì private key được quản lý bởi ssh-agent, bạn cần add private key vào ssh-agent. Thông thường ssh-agent sẽ tự nhận diện nhưng không phải luôn luôn được như ý.
ssh-add <path to private key>
Tiếp đến đẩy id_dsa.pub lên server dùng scp (ở bước này, bạn đăng nhập vào server dùng passwd based ssh)
scp id_dsa.pub <user>@<server ip>:/home/<user>/
Trên server:
Tạo trên server thư mục /home/<user>/.ssh có chứa file authorized_key
Thư mục .ssh này cũng set quyền 700
Nối tiếp nội dung file id_dsa.pub vào authorized_key:
cat id_dsa.pub >> /home/<user>/.ssh/authorized_key
File authorized_key bạn set quyền 600
Điều chỉnh trong ssh config: /etc/ssh/sshd_config
Bỏ comment các dòng sau:
RSAAuthentication yes
PubKeyAuthentication yes
AuthorizedKeysFile /home/<user>/.ssh/authorized_key
Cuối cùng restart lại ssh server
Truy cập từ xa qua ssh:
ssh -vv <user>@<server ip>
- passwd based
- key based
Với passwd based, bạn cần phải ghi nhớ passwd. SSH là giao thức an toàn nên bạn không lo passwd bị truyền clear text qua network
Với key based, bạn không cần passwd, thay vì passwd bạn sẽ dùng một cặp public và private key để truyền thông giữa client và server. Client sẽ giữ private key và mã hóa thông điệp còn public key sẽ nằm trên server dùng để giải mã thông điệp
Các bước thực hiện
Tại client:
Tạo một cặp private và public key. PKI có hai loại giải thuật chính là rsa và dsa. Hiện tại dsa được sử dụng phổ biến hơn.
ssh-keygen -b 1024 -t dsa
Một cặp id_dsa và id_dsa.pub được tạo ra. Bạn cất giữ id_dsa trong ~/.ssh
và set quyền truy cập đến ~/.ssh/id_dsa là 400 còn thư mục ~/.ssh bạn set quyền 700
Vì private key được quản lý bởi ssh-agent, bạn cần add private key vào ssh-agent. Thông thường ssh-agent sẽ tự nhận diện nhưng không phải luôn luôn được như ý.
ssh-add <path to private key>
Tiếp đến đẩy id_dsa.pub lên server dùng scp (ở bước này, bạn đăng nhập vào server dùng passwd based ssh)
scp id_dsa.pub <user>@<server ip>:/home/<user>/
Trên server:
Tạo trên server thư mục /home/<user>/.ssh có chứa file authorized_key
Thư mục .ssh này cũng set quyền 700
Nối tiếp nội dung file id_dsa.pub vào authorized_key:
cat id_dsa.pub >> /home/<user>/.ssh/authorized_key
File authorized_key bạn set quyền 600
Điều chỉnh trong ssh config: /etc/ssh/sshd_config
Bỏ comment các dòng sau:
RSAAuthentication yes
PubKeyAuthentication yes
AuthorizedKeysFile /home/<user>/.ssh/authorized_key
Cuối cùng restart lại ssh server
Truy cập từ xa qua ssh:
ssh -vv <user>@<server ip>
Đăng ký:
Bài đăng (Atom)