在 CentOS 上,原生 SFTP(基于 OpenSSH)本身不能直接限制单个用户的带宽,但可以通过 几种方式实现限带宽。下面按“是否改架构 / 是否简单”给你梳理。
不能直接限。
OpenSSH 的 sftp-server 没有 --bwlimit 这种参数(和 scp 不一样)。
所以纯 SFTP + 默认 sshd 是不行的。
rsync 代替 SFTP(最简单)如果是手动传文件:
rsync -av --bwlimit=1000 user@host:/path /local/path
--bwlimit=1000 → 限制 1MB/sproftpd + SFTP(支持限速)如果你必须用 SFTP 协议,这是最干净的方式。
yum install proftpd proftpd-utils
<IfModule mod_sftp.c>
SFTPEngine on
Port 2222
SFTPLog /var/log/proftpd/sftp.log
SFTPHostKey /etc/ssh/ssh_host_rsa_key
<Limit RATE>
RateRead 1000
RateWrite 1000
</Limit>
</IfModule>
✅ 推荐用于“对外提供 SFTP 服务”
tc(Linux 流量控制,系统级)适合整台服务器或端口限速
tc qdisc add dev eth0 root tbf rate 1mbit burst 32kbit latency 400ms
ssh + pv / pipe 限速(曲线救国)ssh user@host "cat file" | pv -L 1m > file
不推荐,维护成本极高
| 场景 | 建议 |
|---|---|
| 必须用 SFTP 客户端 | ✅ proftpd + SFTP |
| 只是传文件 | ✅ rsync --bwlimit |
| 整台服务器限速 | tc |
| 单纯 OpenSSH SFTP | ❌ 不支持 |
如果你愿意,我可以:
你现在是 给用户限速 还是 整体限速?