在 Linux 上限制 SFTP 带宽,常见做法有 服务器限速 和 客户端限速 两大类。下面按推荐程度和可操作性给你讲清楚。
OpenSSH 本身不支持直接限制 SFTP 带宽,因此常用做法是在 系统层 或 用户层 进行限速。
如果你可以换 SFTP 服务器,ProFTPD 原生支持 SFTP 限速。
yum install proftpd proftpd-sftp # CentOS/RHEL
# 或
apt install proftpd-sftp # Debian/Ubuntu
vim /etc/proftpd/modules.conf
确保:
LoadModule mod_sftp.c
<IfModule mod_sftp.c>
SFTPEngine on
SFTPLog /var/log/proftpd/sftp.log
SFTPHostKey /etc/ssh/ssh_host_rsa_key
SFTPHostKey /etc/ssh/ssh_host_ecdsa_key
<VirtualHost 0.0.0.0>
Port 2222
SFTPClientLimit 10
TransferRate SFTPEngine on
TransferRate 1024 # 单位 KB/s
</VirtualHost>
</IfModule>
✅ 效果:
适合临时或低流量场景。
yum install trickle
# 或
apt install trickle
trickle -s -u 512 -d 512 sftp user@host
参数说明:
-u:上传限速(KB/s)-d:下载限速(KB/s)⚠️ 缺点:
适合服务器级、全局限制。
tc qdisc add dev eth0 root handle 1: htb
tc class add dev eth0 parent 1: classid 1:1 htb rate 1mbit
tc filter add dev eth0 protocol ip parent 1: prio 1 u32 match ip dport 22 0xffff flowid 1:1
⚠️ 缺点:
如果你用 SFTP 实际是数据同步:
rsync -avz --bwlimit=1000 /data/ user@host:/backup/
单位:KB/s
| 场景 | 推荐方案 |
|---|---|
| 生产环境 SFTP | ✅ ProFTPD + mod_sftp |
| 临时限速 | ✅ trickle |
| 服务器整体限速 | ⚠️ tc(高级) |
| 数据同步 | ✅ rsync --bwlimit |
| OpenSSH 原生 | ❌ 不支持 |
✅ 最佳实践
如果你愿意,可以告诉我:
我可以给你一份 可直接用的完整配置。