Bài viết này hướng dẫn cấu hình SSH Key để có thể đồng bộ dữ liệu giữa hai VPS bằng rsync mà không cần nhập mật khẩu.
Mô hình
Server nguồn
IP: Local Server
User: dev_ssh
Thư mục:
/www/wwwroot/lienvu.com
Server đích
IP: 103.82.20.175
User: root
Thư mục:
/www/wwwroot/lienvu.com
Owner: www:www
Bước 1. Kiểm tra SSH Key
Kiểm tra xem server đã có SSH Key hay chưa:
ls ~/.ssh/id_ed25519*
Nếu đã có kết quả như dưới đây thì không cần tạo mới.
id_ed25519
id_ed25519.pub
Nếu chưa có thì tạo mới:
ssh-keygen -t ed25519 -C "root@tool"
Nhấn Enter liên tục và không đặt passphrase.
Bước 2. Copy SSH Key sang server đích
Thực hiện:
ssh-copy-id root@103.82.20.175
Nếu xuất hiện thông báo:
All keys were skipped because they already exist on the remote system.
Có nghĩa là SSH Key đã được cài đặt từ trước và có thể bỏ qua bước này.
Bước 3. Kiểm tra đăng nhập
Thử đăng nhập:
ssh root@103.82.20.175
Nếu đăng nhập thành công mà không yêu cầu nhập mật khẩu thì việc cấu hình SSH Key đã hoàn tất.
Bước 4. Đồng bộ website bằng Rsync
Thực hiện lệnh:
rsync -azP --delete --chown=www:www /www/wwwroot/lienvu.com/ root@103.82.20.175:/www/wwwroot/lienvu.com/
Ý nghĩa các tham số:
| Tham số | Chức năng |
|---|---|
-a | Giữ nguyên quyền, cấu trúc thư mục, symbolic link... |
-z | Nén dữ liệu khi truyền qua mạng |
-P | Hiển thị tiến trình và hỗ trợ resume nếu bị ngắt |
--delete | Xóa các file trên server đích nếu không còn tồn tại ở server nguồn |
--chown=www:www | Đặt owner toàn bộ file sau khi đồng bộ thành www:www |
Chỉ đồng bộ nội dung thư mục
Lưu ý dấu / ở cuối thư mục nguồn:
rsync -azP --delete --chown=www:www /www/wwwroot/lienvu.com/ root@103.82.20.175:/www/wwwroot/lienvu.com/
Nếu bỏ dấu /, rsync sẽ tạo thêm một thư mục con không mong muốn.
Đồng bộ qua SSH Port khác
Ví dụ SSH chạy port 65333:
rsync -azP -e "ssh -p 65333" --delete --chown=www:www /www/wwwroot/lienvu.com/ root@103.82.20.175:/www/wwwroot/lienvu.com/
Tự động đồng bộ bằng Cron
Ví dụ chạy mỗi 5 phút:
*/5 * * * * rsync -az --delete --chown=www:www /www/wwwroot/lienvu.com/ root@103.82.20.175:/www/wwwroot/lienvu.com/ >/dev/null 2>&1
Một số lỗi thường gặp
SSH vẫn yêu cầu nhập mật khẩu
Kiểm tra:
ssh -v root@103.82.20.175
Nếu không sử dụng SSH Key, cần kiểm tra:
File
/root/.ssh/authorized_keysQuyền thư mục
/root/.sshQuyền file
authorized_keysCấu hình
PubkeyAuthentication yesCấu hình
PermitRootLogin
Permission denied
Nếu xuất hiện lỗi:
Permission denied
Kiểm tra quyền của thư mục đích hoặc sử dụng tài khoản root để thực hiện đồng bộ.
Cấu hình SSH Key đã có để rsync không cần nhập mật khẩu
Khi thường xuyên sử dụng rsync hoặc scp để đồng bộ dữ liệu giữa hai máy chủ, việc phải nhập mật khẩu mỗi lần sẽ khá bất tiện. Cách tốt nhất là cấu hình xác thực bằng SSH Key.
Bước 1: Kiểm tra SSH Key trên máy nguồn
Kiểm tra thư mục .ssh:
ls -al ~/.sshNếu đã có các file như id_rsa và id_rsa.pub hoặc id_ed25519 và id_ed25519.pub thì có thể sử dụng ngay.
Bước 2: Copy Public Key sang máy đích
Sử dụng lệnh:
ssh-copy-id -i ~/.ssh/id_rsa.pub -p 65333 dev_ssh@123.456.78.9Nếu sử dụng key id_ed25519 thì thay id_rsa.pub bằng id_ed25519.pub.
Lần đầu tiên hệ thống sẽ yêu cầu nhập mật khẩu của tài khoản dev_ssh. Sau khi hoàn thành, Public Key sẽ được thêm vào file ~/.ssh/authorized_keys trên máy chủ đích.
Bước 3: Kiểm tra kết nối
Thử SSH đến máy chủ:
ssh -i ~/.ssh/id_rsa -p 65333 dev_ssh@123.456.78.9Nếu đăng nhập thành công mà không cần nhập mật khẩu thì việc cấu hình đã hoàn tất.
Bước 4: Sử dụng rsync
Từ bây giờ có thể đồng bộ dữ liệu mà không cần nhập mật khẩu:
rsync -avz --delete -e "ssh -i ~/.ssh/id_rsa -p 65333" \
/data/lienvu.com/index.html \
dev_ssh@123.456.78.9:/data/lienvu.com/index.tplXử lý lỗi "REMOTE HOST IDENTIFICATION HAS CHANGED"
Nếu máy chủ đích vừa được cài đặt lại, bạn có thể gặp lỗi:
WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!
Host key verification failed.Nguyên nhân là SSH Host Key của máy chủ đã thay đổi, trong khi máy nguồn vẫn lưu Host Key cũ trong file ~/.ssh/known_hosts.
Xóa Host Key cũ:
ssh-keygen -R "[123.456.78.9]:65333"Sau đó kết nối lại:
ssh -p 65333 dev_ssh@123.456.78.9Gõ yes để xác nhận Host Key mới. Từ những lần kết nối sau, SSH và rsync sẽ hoạt động bình thường mà không còn xuất hiện cảnh báo.



Nhận xét
Đăng nhận xét