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

通过SSH使用rsync上传文件时遭遇协议数据流错误及无服务器问候问题的解决求助

通过SSH使用rsync上传文件时遭遇协议数据流错误及无服务器问候问题的解决求助

我现在遇到了一个rsync over SSH的问题,想请大家帮忙排查一下。先把我的配置和操作过程说清楚:

服务器端配置

  1. rsync配置文件:/root/.ssh/rsync.conf
uid = root
gid = root
use chroot = false

[data]
path = /var/www/data
  1. 授权密钥配置:/root/.ssh/authorized_keys里添加了一行:
command="rsync --server --daemon --config rsync.conf ." ssh-rsa AAAAB3N...

客户端配置

我的/home/me/.ssh/config是这样的:

Host rsync_data
User root
IdentitiesOnly yes
IdentityFile /home/me/.ssh/id_rsa_rsync
ProxyCommand ssh eu -W 172.17.16.16:22

Host eu
User me
Port 4343
Hostname My_Public_IP_Address_here
IdentitiesOnly yes
IdentityFile /home/me/.ssh/id_rsa_rsync

执行的rsync命令

rsync \
--delete \
-avz \
--stats \
--progress \
-e 'ssh -F /home/me/.ssh/config' \
/home/me/Documents/dev/data/ rsync_data::data

遇到的错误

SSH连接是正常的(我在服务器的/var/log/auth.log里能看到成功的连接记录),但rsync抛出了错误:

rsync error: syntax or usage error (code 1) at clientserver.c(1223 [Receiver=3.2.3]
rsync: connection unexpectedly closed (0 bytes received so far) [sender]
rsync error: error in rsync protocol data stream (code 12) at io.c(231) [sender=3.2.7]

排查与解决建议

结合我处理这类问题的经验,给你几个实用的排查方向,你可以逐一尝试:

  1. 修正rsync配置文件的路径
    你在authorized_keys里用的是相对路径rsync.conf,但SSH触发rsync daemon时的工作目录不一定是/root,大概率找不到配置文件。建议改成绝对路径:

    command="rsync --server --daemon --config /root/.ssh/rsync.conf ." ssh-rsa AAAAB3N...
    

    这是这类问题最常见的诱因,相对路径在受限的command环境下很容易失效。

  2. 手动验证rsync daemon启动命令
    直接在服务器上执行rsync --server --daemon --config /root/.ssh/rsync.conf .,看看会不会报错。如果配置文件有语法错误(比如格式不对、缺漏符号),这里会直接给出提示。

  3. 简化命令测试版本兼容性
    客户端是3.2.7,服务器是3.2.3,虽然版本差距不大,但偶尔会有协议兼容问题。先简化命令去掉可能有争议的参数:

    rsync -avz -e 'ssh -F /home/me/.ssh/config' /home/me/Documents/dev/data/ rsync_data::data
    

    如果简化后能成功,再逐个加参数排查是哪个参数导致的问题。

  4. 添加rsync日志定位细节
    默认rsync daemon不会记录详细日志,你可以在rsync.conf里加上:

    log file = /var/log/rsyncd.log
    

    之后执行客户端命令,查看日志里的具体错误,这能帮你快速定位是配置、权限还是其他问题。

  5. 测试SSH能否正确触发rsync daemon
    直接执行ssh rsync_data,正常情况下应该返回rsync daemon的问候信息(类似@RSYNCD: 31.0)。如果没有返回,说明authorized_keys里的command执行失败了,可以临时修改command添加日志输出:

    command="rsync --server --daemon --config /root/.ssh/rsync.conf . > /tmp/rsync_debug.log 2>&1" ssh-rsa AAAAB3N...
    

    执行ssh rsync_data后,去服务器的/tmp/rsync_debug.log查看具体错误。

  6. 确认目标目录权限
    虽然用的是root用户,但/var/www/data的权限是否允许root读写?执行ls -ld /var/www/data确认,确保root拥有rwx权限。

备注:内容来源于stack exchange,提问作者philippe

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.23 08:39:51