Ngoài tất cả các câu trả lời trước đây, đây là câu trả lời dựa trên các khóa SSH với các hạn chế về những gì có thể được thực hiện khi đăng nhập bằng khóa đó.
Trên máy chủ A
Về vấn đề này, điều đó ít quan trọng hơn nếu bạn tạo một người dùng riêng hoặc sử dụng một trong những tên người dùng hiện có của mình, mặc dù nếu đó là tôi, tôi sẽ tạo một người dùng riêng. Tôi sẽ sử dụng tên người dùng bkpuser
cho cả hai máy chủ trong các ví dụ của tôi dưới đây.
Khi đăng nhập bkpuser
, tạo khóa SSH không có mật khẩu.
Trên máy chủ B
Kích hoạt PubkeyAuthentication
trong sshd_config
.
Tạo người dùng bkpuser
. Đặt mật khẩu rất phức tạp hoặc vô hiệu hóa đăng nhập mật khẩu cho người dùng đó (chính xác cách bạn thực hiện sẽ phụ thuộc vào việc unix và distro bạn đang chạy). Vấn đề là người dùng chỉ nên đăng nhập bằng khóa SSH. Đảm bảo rằng bkpuser
đã đọc quyền truy cập vào tất cả các thư mục và tệp bạn muốn sao lưu.
Sao chép phần chung của khóa được tạo trên A sang ~bkpuser/.ssh/authorized_keys
trên B. Chỉnh sửa để tự động chạy lệnh trên kết nối. Lệnh đó không nên là một con trỏ tới tập lệnh shell; thay vào đó chèn tập lệnh shell vào khóa trực tiếp. Cũng bao gồm một giới hạn để khóa chỉ có thể được sử dụng từ máy chủ A và không có máy chủ nào khác. Trong ví dụ bên dưới, tôi cung cấp cho máy chủ A địa chỉ IP 10.1.2.3
và tôi giả sử rằng các tệp tôi muốn sao lưu đều nằm dưới /data
.
from="10.1.2.3",no-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty,command="cd /data;/usr/bin/tar -cf - *; /usr/bin/logger -t BACKUP -p daemon.info \"INFO: Backup-files on $HOST fetched from ${SSH_CLIENT%% *} by $USER\";" ssh-dss AA.....
Trên máy chủ A
Nếu bạn đang sử dụng một trong các tab cron hỗ trợ @reboot
các mục, hãy thêm mục đó vào bkpuser
s crontab bằng lệnh ssh -i ~bkpuser/.ssh/id_dsa serverB > backup.tar.gz
. Nếu nó không cho phép những thứ đó, hãy đặt nó bất cứ lúc nào bạn muốn - nếu đó là dữ liệu của tôi, có lẽ tôi sẽ làm điều đó hàng ngày.