如何限制 SSH 连接的带宽

如何限制 SSH 连接的带宽

如何限制 SSH 连接的速度?例如,当我进行端口转发 ( ssh -L ...)、反向隧道 ( ssh -R ...) 或 SOCKS5 动态端口转发 ( ssh -D ...) 时,我可能想要限制隧道的带宽。

答案1

ProxyCommand这可以使用它作为原始 TCP 连接的替代方案来完成。您可以ProxyCommand在全局配置ssh( /etc/ssh/ssh_config) 中指定您的私有配置 ( ~/.ssh/config) 或在命令行中指定为ssh -o ProxyCommand=…

一个简单ProxyCommandnc %h %p或等效的(使用nc, ncatsocat具有正确的语法,任何可以为您提供到 SSH 服务器的原始 TCP 连接的东西)。要与服务器通信,您ssh将写入该命令的标准输入,它将从该命令的标准输出中读取。鞋底nc %h %p几乎就像没有连接ProxyCommand(什么时候在内部ssh工作nc)。

诀窍是您可以在两侧的nc %h %p和之间插入过滤器。ssh这样您就可以限制连接。想象一下你的ssh演讲是这样的:

pv -qL 20K | nc %h %p | pv -qL 10K

发送到服务器的内容ssh受到第一个限制pvssh从服务器接收的内容受到第二个限制pv

ssh要通过上述命令运行该对话,请调用:

ssh -o ProxyCommand='pv -qL 20K | nc %h %p | pv -qL 10K' …

笔记:

  • 使用此方法,您可以限制整个 SSH 连接、通过它的所有内容、所有隧道、X11 转发、其他会话(在连接共享的情况下)、一切。您限制原始 TCP 连接。

  • 如果您使用,ssh -N那么您可能希望pv不要安静并实际报告隧道的吞吐量:

    ssh -o ProxyCommand='pv -cN out -L 20K | nc %h %p | pv -cN in -L 10K' -ND 8080 user@server
    
  • 使用pv -R(放在一边调用)您可以更改跑步的设置pv,这样您就可以随时调整油门。如果你想这样做,那么pv -P在里面ProxyCommand告诉 PID 属于什么将会很有用pvman 1 pv详情请参阅。

  • 如果您的配置已使用,ProxyCommand那么您需要使用 s 包含现有值(而不是nc %h %ppv。如果您的配置已经使用,ProxyJump那么您需要将其转换为ProxyCommand,然后用pvs 包含它。

答案2

一种选择是在路由器的端口 22 上应用 QoS。

涓流轻量级用户空间带宽整形器。也可以是作为守护进程运行,在该角色中它可以一次管理多个会话。

另一种可能性是使用类似的东西htb初始化程序- 脚本,或ip_relay

根据这次讨论,你也可以使用 iptables 来限制数据包的流量,但这不是我的选择。我宁愿直接限制带宽。

相关内容