rsync报‘connection refused’错误求助:双向同步服务器sn2异常
我来帮你一步步捋清楚这个rsync连接拒绝的问题——双向同步卡壳确实挺闹心的😅
排查rsync "connection refused" 错误的实操步骤
你的场景很明确:sn1(192.168.13.131)的rsync服务正常,但sn2(192.168.13.132)无法被连接,导致双向同步失败。咱们从最基础的点开始排查:
1. 先确认sn2的rsync服务是否在运行
连接拒绝最常见的原因就是服务压根没启动,先把这个排除:
- 在sn2上执行状态检查命令:
systemctl status rsync(用systemd的系统),或者service rsync status(老系统)。 - 如果显示服务未运行,先启动它:
systemctl start rsync,再设置开机自启避免重启后失效:systemctl enable rsync。 - 要是你的系统用xinetd管理rsync(比如CentOS 6这类老版本),还要检查xinetd服务是否运行,以及rsync在xinetd的配置是否被启用。
2. 检查sn2的防火墙是否拦截了rsync端口
防火墙挡端口是第二高频问题,rsync默认用的是873端口:
- 可以先临时关闭防火墙测试:
systemctl stop firewalld(firewalld工具)或者ufw disable(ufw工具),然后在sn1上再试rsync rsync://192.168.13.132,如果能通了,说明就是防火墙的锅。 - 永久开放873端口:
- firewalld:
firewall-cmd --add-port=873/tcp --permanent,然后firewall-cmd --reload生效 - ufw:
ufw allow 873/tcp
- firewalld:
3. 核对sn2的rsync配置文件
rsync的守护进程配置默认在/etc/rsyncd.conf,得确保这个配置是有效的:
- 至少要有一个可访问的同步模块,比如:
[sync_data] path = /your/actual/sync/directory comment = Bidirectional sync directory read only = no # 双向同步必须设为no,允许写入 hosts allow = 192.168.13.0/24 # 允许整个网段访问,或者直接写sn1的IP hosts deny = * - 重点注意
hosts allow必须包含sn1的IP或所在网段,不然会被直接拒绝。 - 修改配置后记得重启rsync服务:
systemctl restart rsync
4. 测试端口连通性,确认不是网络问题
在sn1上直接测试sn2的873端口是否能通,用telnet或者nc工具:
- 用telnet:
telnet 192.168.13.132 873,如果能看到类似rsync version 3.2.3 protocol version 31的输出,说明端口是通的;如果还是显示Connection refused,那还是服务或防火墙的问题。 - 用nc更直观:
nc -zv 192.168.13.132 873,如果输出显示succeeded,说明端口没问题。
5. 检查rsync的监听地址是否限制了本地访问
有时候rsync会被配置成只监听localhost,导致外部机器无法连接:
- 在sn2上执行:
ss -tulpn | grep rsync,看输出里的监听地址是不是0.0.0.0:873(允许所有IP访问),如果是127.0.0.1:873,那只能本地访问。 - 如果是systemd管理的rsync,编辑
/etc/default/rsync,把RSYNC_OPTS加上--address=0.0.0.0,然后执行systemctl daemon-reload && systemctl restart rsync生效。
6. 排查SELinux(如果你的系统开启了它)
SELinux经常会悄悄阻止rsync的正常运行,尤其是同步目录的权限问题:
- 先临时关闭SELinux测试:
setenforce 0,然后再试连接。如果能通了,就需要配置SELinux规则允许rsync访问同步目录:- 临时设置:
chcon -R -t rsync_data_t /your/sync/directory - 永久设置:
semanage fcontext -a -t rsync_data_t "/your/sync/directory(/.*)?",然后restorecon -Rv /your/sync/directory
- 临时设置:
7. 验证双向同步的命令是否正确
等sn2的rsync服务正常后,还要确保双向同步的命令是对的:
- 从sn1同步到sn2:
rsync -avz /local/sync/dir/ rsync://192.168.13.132/sync_data/ - 从sn2同步到sn1:
rsync -avz /local/sync/dir/ rsync://192.168.13.131/sync_data/ - 如果需要自动同步,可以用crontab定时执行,或者用inotify-tools实现实时触发同步。
如果某个步骤出现异常,比如服务启动失败,可以查看rsync的日志journalctl -u rsync或者/var/log/rsyncd.log,里面会有更详细的错误信息帮你定位问题。
内容的提问来源于stack exchange,提问作者Apokalos
相关产品推荐
相关产品推荐

