在 CentOS 上限制 SFTP 传输速度,常见且可靠的做法有以下几种,按推荐程度从高到低说明。
pam_exec + tc / wondershaper(不推荐,复杂)这种方式实现复杂、维护成本高,不推荐。
ProFTPD 或 vsftpd(如果你能换 FTP 服务)如果你不是必须用 SFTP(SSH),而是可以用 FTP:
vsftpd 支持 local_max_rate但如果你是 必须用 SFTP(基于 SSH),请看下面。
OpenSSH + bandwidth limit(Trickle / cgroup)如果你是 客户端,可以直接限制:
rsync --bwlimit=1000 -avz /local/path user@centos:/remote/path
或 SFTP 客户端(如 FileZilla)自带限速。
✅ 适合:你控制客户端
❌ 不适合:限制服务器上的所有 SFTP 用户
cgroups 限制 sshd 进程带宽(高级但有效)yum install libcgroup libcgroup-tools -y
cgcreate -g net_cls:/sftp_limit
tc 限制网络(示例限速 1Mb)tc qdisc add dev eth0 root tbf rate 1mbit burst 32kbit latency 400ms
sshd 子进程加入 cgroup(需配合 systemd 或 pam)⚠️ 配置复杂,适合运维经验丰富的场景。
rssh + scp 限速(不推荐)rssh 已停止维护,不推荐。
SFTP + chroot + 外部限速代理很多生产环境做法:
| 场景 | 推荐方案 |
|---|---|
| 自己控制客户端 | rsync --bwlimit |
| 限制服务器所有 SFTP | cgroups + tc |
| 不想折腾 | 换 vsftpd |
| 企业环境 | 网络层限速 |
如果你愿意,可以告诉我:
我可以直接给你一份可复制的配置。