SFTP(SSH File Transfer Protocol)传输速率限制可通过OpenSSH配置(推荐,原生支持)或操作系统流量控制工具(如tc)实现。以下是具体方法:
OpenSSH的sshd_config文件支持直接限制用户或组的SFTP传输速率,适用于大多数Linux发行版(如Ubuntu、CentOS、Debian)。
使用文本编辑器打开SSH配置文件:
sudo nano /etc/ssh/sshd_config
在文件末尾添加以下内容,替换<username>为目标用户名,<bandwidth_limit>为限制速率(单位:字节/秒,如1MB/s=1048576字节/秒):
Match User <username>
ForceCommand internal-sftp # 强制使用SFTP
ChrootDirectory %h # 可选:限制用户只能访问家目录
AllowTcpForwarding no # 禁用TCP转发
X11Forwarding no # 禁用X11转发
LimitBandwidth <bandwidth_limit> # 限制总带宽(字节/秒)
例如,限制用户john的传输速率为1MB/s:
Match User john
ForceCommand internal-sftp
ChrootDirectory /home/john
LimitBandwidth 1048576
若需限制整个用户组的速率,可添加以下内容(替换<groupname>为组名):
Match Group <groupname>
ForceCommand internal-sftp
LimitBandwidth <bandwidth_limit>
例如,限制sftpusers组的传输速率为512KB/s(524288字节/秒):
Match Group sftpusers
ForceCommand internal-sftp
LimitBandwidth 524288
保存配置后,重启SSH服务使更改生效:
sudo systemctl restart sshd # 大多数现代Linux发行版
# 或
sudo service ssh restart # 旧版系统(如CentOS 6)
若OpenSSH版本不支持LimitBandwidth,或需要更细粒度的流量控制(如限制特定端口的带宽),可使用tc(Traffic Control)工具。
大多数Linux发行版已预装iproute2,若未安装,可通过以下命令安装:
# Debian/Ubuntu
sudo apt install iproute2
# CentOS/RHEL
sudo yum install iproute
以下命令将SSH端口(默认22)的带宽限制为1Mbps(上传/下载):
# 清除现有队列规则(可选)
sudo tc qdisc del dev eth0 root 2>/dev/null
# 添加HTB队列规则(根节点)
sudo tc qdisc add dev eth0 root handle 1: htb default 30
# 添加父类(总带宽1Mbps)
sudo tc class add dev eth0 parent 1: classid 1:1 htb rate 1mbit ceil 1mbit
# 添加子类(可选,用于更细粒度划分)
sudo tc class add dev eth0 parent 1:1 classid 1:10 htb rate 1mbit ceil 1mbit
# 将SSH端口(22)关联到子类
sudo tc filter add dev eth0 protocol ip parent 1:0 prio 1 u32 match ip dport 22 0xffff flowid 1:10
说明:
eth0:网络接口名称(可通过ip a命令查看,如ens33、wlan0等);rate 1mbit:限制带宽为1Mbps;ceil 1mbit:最大允许带宽(可选,若不设置则等于rate)。tc规则重启后会失效,需将其添加到系统启动脚本(如/etc/rc.local)或使用cron定时任务恢复。
ChrootDirectory,需确保用户家目录权限为755,且所有者为root(如sudo chown root:root /home/username),否则用户无法登录。LimitBandwidth选项需OpenSSH 7.9及以上版本支持,若版本过低,建议升级OpenSSH或使用tc工具。scp或sftp命令测试传输速率(如time scp large_file user@server:/path),确认速率是否符合预期。以上方法可根据实际需求选择使用,OpenSSH配置简单直观,适合大多数场景;tc工具则适合需要更复杂流量控制的场景。