在 Linux 下使用 SFTP 传输文件时,速度受协议、加密、网络、磁盘、配置等多方面影响。下面从立竿见影到进阶优化给你一套实用方案。
在优化前先判断是网络、CPU 还是磁盘:
# 看网络
iperf3 -c 目标IP
# 看 CPU(sftp 加密很吃 CPU)
top
# 或
htop
# 看磁盘
iostat -x 1
SFTP 基于 SSH,默认加密可能偏慢。
客户端指定算法:
sftp -o Ciphers=aes128-gcm@openssh.com \
-o MACs=umac-128@openssh.com \
user@host
或在 ~/.ssh/config:
Host target
Ciphers aes128-gcm@openssh.com,aes256-gcm@openssh.com
MACs umac-128@openssh.com
✅ 推荐:
aes128-gcm@openssh.comchacha20-poly1305@openssh.com(低功耗 CPU 更快)sftp -o TCPRcvBuf=1048576 -o TCPSndBuf=1048576 user@host
或 ~/.ssh/config:
Host *
TCPRcvBuf 1048576
TCPSndBuf 1048576
sftp -C user@host
⚠️ 大文件或高速网络反而更慢(CPU 消耗)
❌ 慢:
sftp> put a.txt
sftp> put b.txt
✅ 快:
sftp> put *.log
# 或
tar czf - dir | sftp user@host:/path
parallel / lftp 多线程(强烈推荐)SFTP 本身单连接串行,可用工具并发:
lftp sftp://user@host
> mirror -P 10 /local /remote
或:
lftp -e "mirror -P 10 --use-pget-n=10 /local /remote" sftp://user@host
✅ 这是提速最明显的方式之一
/etc/ssh/sshd_config:
Ciphers aes128-gcm@openssh.com,aes256-gcm@openssh.com
MACs umac-128@openssh.com
然后:
systemctl restart sshd
fsync 频繁触发| 场景 | 推荐 |
|---|---|
| 内网大文件 | rsync |
| 极速 | nc + tar |
| 公网安全 | rsync over ssh |
| 对象存储 | rclone |
示例:
rsync -avz --progress /data/ user@host:/backup/
✅ 最有效:
lftp 多线程✅ 最稳妥:
如果你愿意,可以告诉我:
我可以直接给你最优命令模板。