提升 Linux 下 SFTP 传输速度,通常可以从网络、系统参数、SFTP/SSH 配置、客户端使用方式几个方面入手。下面按实用程度给你一套思路。
先判断是网络、磁盘、CPU哪一块慢:
iperf3top(SFTP 依赖 SSH 加密,CPU 常是瓶颈)iostat -x 1SSH 默认加密对 CPU 压力大,可指定高效算法:
服务端 /etc/ssh/sshd_config
Ciphers aes128-gcm@openssh.com,chacha20-poly1305@openssh.com
MACs umac-128-etm@openssh.com
重启:
systemctl restart sshd
客户端
sftp -o Ciphers=aes128-gcm@openssh.com user@host
高速网络反而更慢:
Compression no
低速网络可尝试:
sftp -C user@host
/etc/ssh/sshd_config
TCPKeepAlive yes
系统层(所有 TCP):
sysctl -w net.core.rmem_max=16777216
sysctl -w net.core.wmem_max=16777216
sysctl -w net.ipv4.tcp_rmem="4096 87380 16777216"
sysctl -w net.ipv4.tcp_wmem="4096 65536 16777216"
parallel / lftp 多线程(强烈推荐)SFTP 本身单连接串行,很慢。
✅ lftp(支持并行)
lftp sftp://user@host
> set net:max-rate 0
> set pget:default-n 10
> pget file.iso
或批量:
mirror --parallel=10 /remote /local
小文件极慢(每个都有握手开销):
tar 再传:tar czf - dir | sftp user@host:/path
或
tar czf file.tar.gz dir && sftp file.tar.gz
sysctl -w net.core.default_qdisc=fq
sysctl -w net.ipv4.tcp_congestion_control=bbr
查看:
sysctl net.ipv4.tcp_congestion_control
ip link set eth0 mtu 1400
atime:mount -o remount,noatime /
如果你愿意,可以告诉我:
我可以给你一套针对性配置。