Linux中rsync通过SSH同步无需部署rsync服务端,只需SSH可达;核心是正确使用rsync -avz -e "ssh -p PORT"命令,配合密钥认证、路径斜杠控制、--delete等选项,并注意权限、安全与自动化适配。

Linux 中配置 rsync 通过 SSH 通道同步,核心是利用 SSH 加密隧道传输数据,无需额外部署 rsync 服务端(如 rsyncd),只要目标主机开放 SSH 并允许登录即可。关键在于命令写法、权限控制和基础安全准备。
确保 SSH 登录可用
rsync 依赖 SSH 建立连接,所以必须先验证能免密或密码方式登录远程主机:
- 推荐配置 SSH 密钥认证:在本地执行 ssh-keygen 生成密钥对,再用 ssh-copy-id user@host 将公钥复制到远程用户
~/.ssh/authorized_keys中 - 测试连通性:ssh user@host 能直接登录即表示就绪;若 SSH 端口非默认 22(比如 2222),后续 rsync 命令中需显式指定
- 注意远程用户对目标路径有读写权限,尤其当同步到
/var/www或/opt等系统目录时,可能需要 sudo 权限或改用具备对应权限的账户
基础 rsync + SSH 同步命令格式
语法统一为:rsync [选项] 源路径 用户@主机:目标路径(推送)或 rsync [选项] 用户@主机:源路径 目标路径(拉取)
Linux 安全审计工具,检查 SSH 配置、开放/监听端口、防火墙规则(ufw/iptables/nftables)、失败登录尝试、sudoers 权限...
- 常用组合选项:-avz -e "ssh -p 2222" ——
-a保留属性,-v显示过程,-z压缩传输,-e指定 SSH 及端口 - 路径末尾斜杠影响行为:
/data/表示同步该目录下内容;/data(无斜杠)表示同步 data 整个目录 - 示例(推送):rsync -avz -e "ssh -p 2222" /home/user/project/ deploy@192.168.1.100:/var/www/html/
- 示例(拉取):rsync -avz -e ssh logs@prod-server:/var/log/app/*.log /backup/logs/
增强安全性与实用性的关键选项
仅传输不覆盖、跳过敏感文件、限制带宽等,都能提升同步过程的可控性:
-
--delete:使目标严格匹配源——删除目标中源已不存在的文件(慎用,建议先加
--dry-run预览) - --exclude='*.tmp' --exclude='/cache/':排除临时文件或缓存目录,避免冗余传输
- --ignore-existing:跳过目标端已存在且未变更的文件,防止误覆盖
- --bwlimit=500:限制传输带宽为 500 KB/s,避免挤占其他业务网络资源
- --partial --progress:支持断点续传并显示实时进度,适合大文件或不稳定网络
自动化与权限注意事项
脚本化或定时任务中使用时,需特别注意环境一致性与权限边界:
- 脚本中避免硬编码密码;SSH 密钥应设为
chmod 600 ~/.ssh/id_rsa,禁止 group/other 可读 - 若需以 root 权限写入远程系统目录,可配置远程用户免密 sudo(如
deploy ALL=(ALL) NOPASSWD: /usr/bin/rsync),并在命令中用sudo rsync ...调用(不推荐直接用 root 登录) - crontab 执行时,SSH agent 可能不可用,建议在脚本开头添加
eval $(ssh-agent)并加载密钥,或改用绝对路径调用 key(如-e "ssh -i /home/user/.ssh/deploy_key") - 首次运行建议加
--dry-run参数检查实际将操作哪些文件,确认无误后再去掉

















