在 Debian 上限制 SFTP 传输速度,常见做法有几种,取决于你是限制整个系统/用户/目录,还是临时限速。下面按使用场景介绍。
OpenSSH 本身 不支持 SFTP 限速,但可以通过 Linux tc(traffic control) 限制端口流量。
# 安装 tc
apt update
apt install -y iproute2
# 假设网卡是 eth0
TC_DEV=eth0
LIMIT=1mbit # 1Mbps
tc qdisc add dev $TC_DEV root handle 1: htb default 10
tc class add dev $TC_DEV parent 1: classid 1:1 htb rate 1000mbit
tc class add dev $TC_DEV parent 1:1 classid 1:10 htb rate $LIMIT
# 限制目的端口 22(SFTP)
tc filter add dev $TC_DEV protocol ip parent 1:0 prio 1 u32 \
match ip dport 22 0xffff flowid 1:10
⚠️ 注意:
rssh + scp 限速(不推荐)rssh 已多年不维护,不推荐新环境使用。
proftpd / vsftpd(FTP,不是 SFTP)如果你愿意改用 FTPS,可以直接限速:
local_max_rate=100000 # 100KB/s
⚠️ 这是 FTP,不是 SFTP(SSH)
sftp 客户端限速(临时)如果你是 客户端限速:
sftp -l 100 user@host
-l 单位是 KB/s适合多用户服务器,但配置复杂。
systemd 限制 SSH 服务(不精确)[Service]
IOBandwidthMax=/dev/sda 1M
⚠️ 只对磁盘 IO,不对网络
| 需求 | 推荐方案 |
|---|---|
| 整个服务器 SFTP 限速 | tc 限制 22 端口 |
| 单个用户限速 | tc + 用户 IP / namespace |
| 客户端临时限速 | sftp -l |
| 新项目 | 考虑 FTPS + vsftpd |
如果你愿意,可以告诉我:
我可以给你一份可直接用的脚本。