Có 3 con đường mà tôi có thể nghĩ ra có thể cung cấp cho bạn một giải pháp.
1. Hệ thống con sftp tùy chỉnh
Bạn có thể bọc sftp-server
daemon qua sshd_config
và "ghi đè" nó bằng tập lệnh của riêng bạn, sau đó có thể chặn những gì sftp-server
đang làm và sau đó hành động khi bạn thấy rằng một tệp đã được tải xuống. Trọng mặc định sftp-server
trong sshd_config
rất dễ dàng:
Subsystem sftp /usr/local/bin/sftp-server
Tìm hiểu những gì cần làm trong tập lệnh bao bọc sẽ là phần khó /usr/local/bin/sftp-server
. Trong:
#!/bin/sh
# ...do something...
chroot /my/secret/stuff /usr/libexec/openssh/sftp-server
# ...do something...
2. Xem nhật ký
Nếu bạn bật gỡ lỗi, sftp-sever
bạn có thể làm cho nó hiển thị nhật ký khi các tệp đang được mở / đóng và đọc / ghi vào / từ máy chủ SFTP. Bạn có thể viết một daemon / script xem các nhật ký này và sau đó sao lưu tệp khi cần. Chi tiết thêm về cách đạt được điều này đã được đề cập một phần trong câu trả lời của tôi cho câu hỏi và trả lời về U & L này: Mức ghi nhật ký hoạt động trong SFTP cũng như ở đây trong bài đăng trên blog này có tiêu đề: Ghi nhật ký hoạt động phiên chuyển tệp SFTP .
Nhật ký SFTP có thể được tăng cường để chúng trông như thế này:
Sep 16 16:07:19 localhost sftpd-wrapper[4471]: user sftp1 session start from 172.16.221.1
Sep 16 16:07:19 localhost sftp-server[4472]: session opened for local user sftp1 from [172.16.221.1]
Sep 16 16:07:40 localhost sftp-server[4472]: opendir "/home/sftp1"
Sep 16 16:07:40 localhost sftp-server[4472]: closedir "/home/sftp1"
Sep 16 16:07:46 localhost sftp-server[4472]: open "/home/sftp1/transactions.xml" flags WRITE,CREATE,TRUNCATE mode 0644
Sep 16 16:07:51 localhost sftp-server[4472]: close "/home/sftp1/transactions.xml" bytes read 0 written 192062308
Sep 16 16:07:54 localhost sftp-server[4472]: session closed for local user sftp1 from [172.16.221.1]
Sau đó, bạn sẽ cần phát triển một daemon / script để theo dõi nhật ký cho các cặp sự kiện mở / đóng. Chúng đại diện cho một chuyển tập tin hoàn thành. Bạn cũng có thể sử dụng syslog, có thể theo dõi các sự kiện nhật ký "ĐÓNG" và nó có thể được sử dụng để thực hiện sao chép các tệp được chuyển.
3. Incron
Bạn có thể sử dụng các sự kiện Inotify mà nhân Linux tạo ra mỗi khi tệp được truy cập. Có một dịch vụ gọi là Incron hoạt động tương tự như Cron. Trường hợp Cron hoạt động dựa trên thời gian, Incron hoạt động dựa trên các sự kiện tệp. Vì vậy, bạn có thể thiết lập mục nhập Incron để theo dõi các thư mục tải lên SFTP của bạn và bất cứ khi nào phát hiện ra một sự kiện tệp cụ thể, hãy sao chép tệp.
Có một cái nhìn vào trang người đàn ông inotify để mô tả về các sự kiện khác nhau. Tôi tin rằng bạn muốn xem một read()
( IN_ACCESS
) theo sau là close()
( IN_CLOSE_WRITE
). Chúng sẽ dành cho các tệp được sao chép từ máy chủ SFTP.
Quy tắc Incron trông như thế này:
<directory> <file change mask> <command or action> options
/var/www/html IN_CREATE /root/scripts/backup.sh
/sales IN_DELETE /root/scripts/sync.sh
/var/named/chroot/var/master IN_CREATE,IN_ATTRIB,IN_MODIFY /sbin/rndc reload
Bài viết này có tiêu đề: Linux bao gồm inotify: Giám sát các thay đổi và hành động cho thấy nhiều chi tiết cần thiết hơn, nếu bạn muốn thử và đi với tùy chọn này.