在 Ubuntu 上限制 SFTP 传输速度,常见有以下几种方式,按「是否改服务端」和「使用场景」分类说明。
OpenSSH + tc / trickle(不推荐复杂)OpenSSH 本身 不支持直接限速,需要借助外部工具。
ProFTPD(支持 SFTP + 限速)✅ 推荐如果你可以换 SFTP 服务软件:
sudo apt install proftpd
配置 /etc/proftpd/proftpd.conf:
<IfModule mod_sftp.c>
SFTPEngine on
Port 2222
SFTPLog /var/log/sftp.log
HostKey /etc/ssh/ssh_host_rsa_key
HostKey /etc/ssh/ssh_host_ecdsa_key
<Limit ALL>
TransferRate SOFTWARE 1000 # 下载 1MB/s
TransferRate STOR 1000 # 上传 1MB/s
</Limit>
</IfModule>
重启:
sudo systemctl restart proftpd
✅ 支持 按用户 / 目录 / 速度
sftp + pv(简单实用)✅ 推荐sudo apt install pv
上传限速(例如 1MB/s):
pv -L 1m file.txt | sftp user@host:/remote/path/
下载限速:
ssh user@host "cat /remote/file.txt" | pv -L 1m > file.txt
rsync 限速(很多 SFTP 用户实际用 rsync)rsync -avz --bwlimit=1000 -e ssh file user@host:/path/
--bwlimit=1000表示 KB/s
tc(流量控制)sudo tc qdisc add dev eth0 root tbf rate 1mbit burst 32kbit latency 400ms
⚠️ 影响整个网卡,不区分端口
| 场景 | 推荐方案 |
|---|---|
| 服务器统一限速 | ProFTPD |
| 单用户临时限速 | pv / rsync |
| 不想改服务 | rsync --bwlimit |
| 运维级控制 | tc |
如果你愿意,可以告诉我:
我可以直接给你一套可复制的配置。