提升 Linux 下 SFTP 传输速度通常从 网络、加密算法、磁盘、SFTP 配置、客户端参数 五个方面入手。下面按实用性和可操作性给你一套完整优化方案。
在优化前,先判断是 网络 / CPU / 磁盘 问题:
# 查看 CPU 是否打满
top
# 查看磁盘 IO
iostat -x 1
# 查看网络带宽
iftop
SFTP 基于 SSH,加密算法直接影响速度。
编辑服务器 /etc/ssh/sshd_config:
Ciphers aes128-gcm@openssh.com,aes256-gcm@openssh.com,chacha20-poly1305@openssh.com
MACs hmac-sha2-256-etm@openssh.com
✅
aes128-gcm和chacha20-poly1305在现代 CPU 上非常快
❌ 避免使用aes256-cbc(慢)
重启 SSH:
systemctl restart sshd
减少协商开销:
HostKey /etc/ssh/ssh_host_ed25519_key
echo "net.core.default_qdisc=fq" >> /etc/sysctl.conf
echo "net.ipv4.tcp_congestion_control=bbr" >> /etc/sysctl.conf
sysctl -p
验证:
sysctl net.ipv4.tcp_congestion_control
net.core.rmem_max = 134217728
net.core.wmem_max = 134217728
net.ipv4.tcp_rmem = 4096 87380 67108864
net.ipv4.tcp_wmem = 4096 65536 67108864
Subsystem sftp internal-sftp
避免 fork 外部进程,性能更好。
UseDNS no
sftp -c aes128-gcm@openssh.com user@host
SFTP 本身不支持多线程,但你可以:
✅ 拆分文件 + 多连接
# 并行传输
sftp user@host &
sftp user@host &
✅ 改用 rsync(比 SFTP 快)
rsync -avz --progress /data/ user@host:/data/
iostat -x 1
如果是 HDD:
mount -t tmpfs tmpfs /mnt/ramdisk
| 场景 | 推荐 |
|---|---|
| 大文件 | rsync -avz |
| 断点续传 | rsync --partial |
| 多线程 | lftp / rclone |
| 极速 | bbcp / aspera(商业) |
lftp sftp://user@host -e "mirror -c --parallel=8 /remote /local"
❌ 盲目调 ClientAliveInterval
❌ 调大 MTU(跨公网风险大)
❌ 以为 SFTP 比 SCP 快(实际上不一定)
✅ 服务器
Subsystem sftp internal-sftp
Ciphers aes128-gcm@openssh.com
UseDNS no
✅ 网络
✅ 客户端
rsync -avzlftp 多线程如果你愿意,可以告诉我:
我可以给你一套 针对你环境的精确参数。