温馨提示×

linux sftp怎样提速

小樊
41
2026-10-29 08:16:34
栏目: 智能运维

在 Linux 下使用 SFTP 传输文件时,速度受协议、加密、网络、磁盘、配置等多方面影响。下面从立竿见影到进阶优化给你一套实用方案。


一、先确认瓶颈在哪

在优化前先判断是网络、CPU 还是磁盘:

# 看网络
iperf3 -c 目标IP

# 看 CPU(sftp 加密很吃 CPU)
top
# 或
htop

# 看磁盘
iostat -x 1
  • CPU 占用高 → 加密算法问题
  • 带宽没跑满 → 网络或窗口大小
  • 磁盘 100% → 磁盘 IO 瓶颈

二、SFTP 本身加速(最常用)

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.com
  • chacha20-poly1305@openssh.com(低功耗 CPU 更快)

2️⃣ 增大 SSH 窗口大小(大文件明显)

sftp -o TCPRcvBuf=1048576 -o TCPSndBuf=1048576 user@host

或 ~/.ssh/config:

Host *
    TCPRcvBuf 1048576
    TCPSndBuf 1048576

3️⃣ 开启压缩(仅小文件 / 慢网络有效)

sftp -C user@host

⚠️ 大文件或高速网络反而更慢(CPU 消耗)


三、SFTP 命令级优化

4️⃣ 批量传输,而不是单文件

❌ 慢:

sftp> put a.txt
sftp> put b.txt

✅ 快:

sftp> put *.log
# 或
tar czf - dir | sftp user@host:/path

5️⃣ 使用 parallel / lftp 多线程(强烈推荐)

SFTP 本身单连接串行,可用工具并发:

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

✅ 这是提速最明显的方式之一


四、服务端优化(如果你是管理员)

6️⃣ 修改 sshd 配置

/etc/ssh/sshd_config:

Ciphers aes128-gcm@openssh.com,aes256-gcm@openssh.com
MACs umac-128@openssh.com

然后:

systemctl restart sshd

7️⃣ 磁盘 / 文件系统

  • 使用 SSD
  • 避免 ext4 + sync 挂载
  • 大文件避免 fsync 频繁触发

五、如果可以“不考虑 SFTP 协议”

8️⃣ 换更快的传输方式

场景 推荐
内网大文件 rsync
极速 nc + tar
公网安全 rsync over ssh
对象存储 rclone

示例:

rsync -avz --progress /data/ user@host:/backup/

六、总结(优先级)

✅ 最有效:

  1. 用 lftp 多线程
  2. 换 GCM 加密算法
  3. 增大 TCP 窗口

✅ 最稳妥:

  • 批量传输
  • 避免单文件循环

如果你愿意,可以告诉我:

  • 内网还是公网?
  • 文件大小 / 数量?
  • CPU 型号?

我可以直接给你最优命令模板。

0 踩