如何限制 SSH 连接的带宽

Flu*_*lux 7 ssh ssh-tunneling bandwidth

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

Kam*_*ski 14

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

\n

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

\n

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

\n
pv -qL 20K | nc %h %p | pv -qL 10K\n
Run Code Online (Sandbox Code Playgroud)\n

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

\n

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

\n
ssh -o ProxyCommand='pv -qL 20K | nc %h %p | pv -qL 10K' \xe2\x80\xa6\n
Run Code Online (Sandbox Code Playgroud)\n

笔记:

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

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

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

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

    \n
  • \n
\n


Per*_*o69 1

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

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

另一种可能性是使用htb.init -script 或ip_relay之类的东西。

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