使用Rust监控SFTP文件系统变更(无SSH访问权限)
监控SFTP文件系统变更的Rust实现问题
我需要监控SFTP上的文件系统变更,当有文件上传至目录或特定文件被修改时收到通知。用inotify-rs在本地文件系统运行正常,但无法适配SFTP环境。
尝试过的方案
- 方案1:传入SFTP URI
let current_dir = std::path::Path::new("sftp://user@ip:port/path") .expect("Failed to determine current directory");
该方案未生效。
- 方案2:使用ssh2 crate的SFTP连接对象
let tcp = TcpStream::connect(self.ip_with_port()).unwrap(); let mut sess = Session::new().unwrap(); sess.set_tcp_stream(tcp); sess.handshake().unwrap(); sess.userauth_password(&self.user, &self.pwd)?; let sftp = sess.sftp().unwrap(); let current_dir = sftp.realpath(std::path::Path::new("<path to sftp file>")) .expect("Failed to determine current directory");
该方案也未成功。
后续思路
考虑通过SFTP同步工具(如rsync、csync、lftp)寻找解决方向,但需要将其整合进Rust二进制文件中。
业务背景
我方有多个客户服务器使用产品,出于安全考虑仅能通过SFTP作为中间交互接口。当前需工程师逐个监控部署,耗费大量人力。希望通过监控SFTP变更实现集中管理,向SFTP发送含SQL查询等内容的JSON文件,供客户服务器读取执行。
内容的提问来源于stack exchange,提问作者Hamza Zubair
相关产品推荐
相关产品推荐

