You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在服务端而非客户端构建rsync同步文件列表?

服务端自定义rsync同步文件列表的实现方案

核心思路

通过rsync的--server模式搭配自定义脚本,从服务端数据库获取当前用户的授权文件列表,替代客户端指定的同步源,实现客户端仅需发起简单拉取命令即可同步指定文件。

具体步骤

  1. 编写服务端授权文件查询脚本
    创建可执行脚本(例如/usr/local/bin/rsync_get_authorized_files.sh),逻辑如下:

    #!/bin/bash
    # 获取当前SSH连接的用户名
    CURRENT_USER=$(whoami)
    # 从数据库查询该用户的授权文件绝对路径(替换为你的实际数据库查询语句)
    AUTHORIZED_FILES=$(psql -U db_user -d your_database -t -c "SELECT file_path FROM user_authorized_files WHERE username='$CURRENT_USER'")
    # 输出文件列表,确保每行一个路径
    echo "$AUTHORIZED_FILES"
    

    赋予脚本执行权限:

    chmod +x /usr/local/bin/rsync_get_authorized_files.sh
    
  2. 配置SSH公钥的command参数
    在服务端用户的~/.ssh/authorized_keys文件中,修改目标公钥的配置行,将command设置为动态生成文件列表的rsync服务端命令:

    command="rsync --server --sender -logDtprze.iLsfx . \$($(which rsync_get_authorized_files.sh))" ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAA...
    

    参数说明:

    • --server:启用rsync服务端模式
    • --sender:指定服务端作为文件发送方(对应客户端拉取操作)
    • -logDtprze.iLsfx:对应rsync默认传输的属性保留参数,可根据需求调整
    • \$($(which rsync_get_authorized_files.sh)):执行脚本动态获取授权文件列表,作为同步源
  3. 客户端执行同步命令
    客户端只需运行以下命令,即可同步服务端生成的授权文件列表:

    rsync user@hostname:/ destination-dir/
    

    注意:这里的:/是必须的,用于告知rsync服务端使用动态生成的文件列表而非根目录。

注意事项

  • 绝对路径要求:脚本输出的文件路径必须是服务端的绝对路径,避免相对路径引发的同步错误。
  • 安全控制:确保脚本和数据库查询仅被授权用户访问,避免未授权的文件泄露。
  • 参数适配:根据实际同步需求调整--server后的参数,比如不需要保留某些文件属性时可删减对应参数。

内容的提问来源于stack exchange,提问作者Smally

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 05:37:43