Linux 服务器之间安全高效传输文件的几种主流方法(2025-2026 实战指南)
以下是目前生产环境中最常用的几种方式,按安全性、速度、易用性、增量传输能力排序对比:
| 方法 | 安全性 | 速度 | 增量/断点续传 | 易用性 | 典型场景 | 推荐指数 |
|---|---|---|---|---|---|---|
| scp | 高 | 中等 | 无 | ★★★★☆ | 临时传单个/少量文件 | ★★★☆☆ |
| rsync + ssh | 高 | 极快(增量) | 优秀 | ★★★★☆ | 定期同步目录、备份、大文件迁移 | ★★★★★ |
| sftp | 高 | 中等 | 部分支持 | ★★★☆☆ | 需要交互式操作、目录浏览 | ★★★☆☆ |
| rsync + daemon | 中等 | 最快 | 优秀 | ★★☆☆☆ | 内网大批量、高频同步(不推荐公网) | ★★☆☆☆ |
| lsyncd | 高 | 近实时 | 优秀 | ★★★★ | 实时镜像目录(基于 rsync + inotify) | ★★★★☆ |
| rclone | 高 | 快 | 优秀 | ★★★★ | 跨云、跨协议、加密传输 | ★★★★☆ |
1. scp(最简单,但不适合大批量或重复传输)
# 从本地 → 远程
scp file.txt user@192.168.1.88:/data/backup/
# 远程 → 本地
scp user@192.168.1.88:/var/log/nginx/access.log.gz ./
# 目录(必须加 -r)
scp -r ./project/ user@192.168.1.88:/home/www/
# 常用加速参数组合(2025年仍然有效)
scp -C -P 2222 -i ~/.ssh/id_ed25519 -r src/ dest:
# -C 压缩传输(对文本类文件有效)
# -P 指定端口
# -i 指定私钥
# -p 保留权限/时间戳
缺点:每次都完整传输,无法增量,断网就重来。
2. rsync over ssh(目前性价比最高的方案)
几乎是生产环境默认选择。
最常用写法(强烈建议背下来):
# 基本用法(最常用)
rsync -avz --progress source/ user@remote:/dest/
# 常用参数组合(生产必备)
rsync -avz --delete \
--exclude-from=exclude.txt \
--progress \
-e "ssh -p 2222 -i ~/.ssh/key_ed25519" \
/data/www/ root@192.168.1.201:/backup/www/
# 只同步部分文件(通配符)
rsync -avz --include='*.sql' --include='*.log' --exclude='*' src/ dest/
# 干跑(预览要做什么,非常重要!)
rsync -avz --dry-run --itemize-changes src/ dest/
# 删除目标端多余文件(镜像同步)
rsync -avz --delete src/ dest/
# 只更新比源新的文件(小心使用)
rsync -avzu --ignore-existing src/ dest/
推荐的 exclude.txt 示例
.git
node_modules
*.bak
*.tmp
logs/*.gz
速度优化小技巧
# 使用更快的压缩算法(zstd)
rsync ... --rsync-path="rsync --zstd-level=3"
# 多线程传输(需要 rsync 3.2.7+)
rsync ... --whole-file --inplace -zz
# 使用更快的加密算法(推荐 ed25519 或 chacha20-poly1305)
# 在 ssh_config 中配置:
Host 192.168.*
Ciphers chacha20-poly1305@openssh.com,aes128-gcm@openssh.com
MACs hmac-sha2-512-etm@openssh.com
3. sftp(交互式 / 脚本化传输)
# 交互式
sftp -P 2222 user@192.168.1.88
> cd /data/backup
> lcd /local/folder
> put -r ./dist/
> get access.log.*
> exit
# 批量脚本方式(最常用)
sftp -o StrictHostKeyChecking=no -b - user@remote << EOF
cd /backup
lcd /data
put -r project/
get *.sql
exit
EOF
4. 速度对比参考(同一台千兆内网,传 10GB 混合文件)
| 方法 | 耗时 | 说明 |
|---|---|---|
| scp | ~180s | 完整传输 |
| rsync -avz | ~45–60s | 第一次 |
| rsync -avz(第二次) | ~3–8s | 几乎只传变化部分 |
| rsync -avz –inplace | ~40s | 大文件修改后最快 |
| rsync daemon | ~35–45s | 无 ssh 加密开销 |
5. 2025–2026 生产环境最推荐组合(口诀)
日常小文件 / 临时传输 → scp -P -i
大目录 / 定期备份 / 代码发布 → rsync -avz --delete --exclude
需要实时同步 → lsyncd 或 rsync + inotify-tools
跨云 / 对象存储 → rclone sync
需要加密 + 压缩 + 去重 → rclone crypt + zstd
一句话总结口诀(背下来很有用)
“小传 scp,大传 rsync,实时 lsyncd,跨云 rclone; -avz –delete –dry-run 先预演,生产再执行。”
你目前最常遇到的场景是哪一种?
- 代码/前端构建产物发布
- 数据库全量备份或 binlog 同步
- 日志文件收集
- 大模型权重/数据集迁移
- 异地容灾同步
告诉我具体场景和文件大小/频率,我可以给你最优的命令组合和注意事项。