linux中rsync daemon模式实现免交互同步的核心是服务端配置认证模块(含auth users与secrets file)并启动rsyncd守护进程,客户端通过--password-file指定纯密码文件,以rsync_backup@ip::module格式调用,全程不依赖ssh、不手动输密。

Linux 中使用 rsync 配合密码文件实现免交互同步,核心是采用 rsync daemon 模式(非 SSH 模式),通过服务端配置认证模块 + 客户端指定密码文件,完全避开手动输密。这种方式不依赖 SSH,适合生产环境隔离要求高的场景,也便于脚本或 Java 等程序调用。
服务端配置 rsync daemon 并设置认证
服务端需运行 rsync 守护进程(rsyncd),并定义带账号密码的模块:
- 编辑 /etc/rsyncd.conf,关键配置项包括:
uid = rsync(运行用户,建议非 root)gid = rsyncauth users = rsync_backup(允许登录的虚拟用户名)secrets file = /etc/rsync.password(密码文件路径)[backup](模块名,如 backup)path = /backup(该模块映射的真实目录)read only = false(若需上传则设为 false) - 创建密码文件 /etc/rsync.password,格式为
用户名:密码(如rsync_backup:admin1234),权限必须设为600:chmod 600 /etc/rsync.password - 创建对应用户和备份目录,并赋权:
useradd -s /sbin/nologin rsyncmkdir -p /backup && chown rsync:rsync /backup - 启动服务:
systemctl start rsyncd && systemctl enable rsyncd
确保防火墙放行 TCP 873 端口:firewall-cmd --permanent --add-port=873/tcp && firewall-cmd --reload
客户端配置密码文件并执行同步
客户端无需安装 rsyncd,只需配置本地密码文件并调用 rsync 命令:
- 创建客户端密码文件(如 /etc/rsync_client.pass),内容仅含密码(不能有用户名,也不能有空格或换行):
echo "admin1234" > /etc/rsync_client.pass
同样设权限:chmod 600 /etc/rsync_client.pass - 执行同步命令,用
--password-file指定密码文件:rsync -avz /data/ rsync_backup@192.168.1.100::backup --password-file=/etc/rsync_client.pass
注意格式:用户名@服务器IP::模块名,不是 SSH 的@形式 - 验证是否成功:检查服务端 /var/log/rsyncd.log 是否有连接与传输记录
常见问题与注意事项
免交互失败多数源于配置细节,重点排查以下几点:
- 服务端 secrets file 中的用户名必须与客户端命令中
rsync_backup@...的用户名完全一致(区分大小写) - 客户端密码文件必须是纯文本、单行、无 BOM、无尾随空格;否则会报
auth failed - 服务端 /etc/rsyncd.conf 中若设置了
hosts allow,需确保客户端 IP 在白名单内(如hosts allow = 192.168.1.0/24) - 不要混淆
--password-file(客户端用)和secrets file(服务端用)——前者只传密码,后者存“用户名:密码” - 首次测试建议先用
rsync --list-only rsync_backup@IP::模块名 --password-file=...查看模块列表,确认基础连通性
对比 SSH 方式的关键区别
rsync daemon + 密码文件方案与 rsync over SSH 的主要差异在于:
- 通信走独立的 rsync 协议(TCP 873),不经过 sshd,避免 SSH 跳转风险
- 使用虚拟账号(如 rsync_backup),与系统账户无关,权限更可控
- 密码文件由 rsync 自己解析,不涉及 shell 登录或 PAM 认证
- 服务端无法直接执行任意命令,安全性更高,适合多租户或强审计环境











