rsync修改端口需区分ssh和rsyncd两种模式:ssh方式用-e "ssh -p 端口号"指定远程ssh端口;rsyncd方式需在服务端rsyncd.conf中修改port参数、重启服务,并在客户端同步命令中添加--port=端口号。

rsync 本身不直接管理网络端口,它依赖底层传输协议(如 SSH 或 rsync daemon)建立连接。因此,“修改远程端口”实际取决于你用的是哪种同步方式:走 SSH 隧道,还是直连 rsync 守护进程(rsyncd)。两种场景的端口设置方法完全不同,不能混用。
通过 SSH 同步时指定非 22 端口
这是最常见的情形。rsync 默认调用系统 ssh 命令,而 ssh 默认连 22 端口。若远程 SSH 服务改了端口(比如 2022、2222),必须显式告诉 rsync 使用哪个端口——不是给 rsync 加参数,而是让它调用带 -p 选项的 ssh。
- 用 -e "ssh -p PORT" 覆盖默认 shell
- 推送示例:
rsync -avz /local/dir/ -e "ssh -p 2022" user@host:/remote/dir/ - 拉取示例:
rsync -avz -e "ssh -p 2022" user@host:/remote/dir/ /local/dir/ - 可配合免密登录使用,不影响端口指定逻辑
通过 rsync daemon(rsync://)同步时修改监听端口
当你启用独立的 rsync 守护进程(rsync --daemon)并使用 rsync://host::module 地址时,端口由服务端配置决定,默认是 873。要改端口,需在服务端操作:
- 编辑 /etc/rsyncd.conf,添加或修改
port = 8873(例如改成 8873) - 确保防火墙放行新端口(如
firewall-cmd --add-port=8873/tcp --permanent) - 重启服务:
systemctl restart rsyncd(或pkill rsync && rsync --daemon) - 客户端同步时,需显式加 --port 参数:
rsync -avz user@host::module /dest/ --port=8873
常见误区提醒
容易出错的地方往往不在命令本身,而在混淆协议:
- 别把 SSH 端口参数套到 rsync daemon 场景里:-e "ssh -p X" 对 rsync:// 地址无效
- 别漏掉客户端 --port 参数:服务端改了 873,客户端不加 --port 就连不上
- 别用 scp 的 -P 参数语法:rsync 不认 -P(那是 scp 的),它用的是 -e 或 --port
- SSH 方式下,端口是远程服务器上 sshd 监听的端口;rsyncd 方式下,端口是远程 rsyncd 进程监听的端口——两者完全独立











