如何限制 SSH 连接的速度?例如,当我进行端口转发 ( ssh -L ...
)、反向隧道 ( ssh -R ...
) 或 SOCKS5 动态端口转发 ( ssh -D ...
) 时,我可能想要限制隧道的带宽。
答案1
ProxyCommand
这可以使用它作为原始 TCP 连接的替代方案来完成。您可以ProxyCommand
在全局配置ssh
( /etc/ssh/ssh_config
) 中指定您的私有配置 ( ~/.ssh/config
) 或在命令行中指定为ssh -o ProxyCommand=…
。
一个简单ProxyCommand
的nc %h %p
或等效的(使用nc
, ncat
,socat
具有正确的语法,任何可以为您提供到 SSH 服务器的原始 TCP 连接的东西)。要与服务器通信,您ssh
将写入该命令的标准输入,它将从该命令的标准输出中读取。鞋底nc %h %p
几乎就像没有连接ProxyCommand
(什么时候在内部ssh
工作nc
)。
诀窍是您可以在两侧的nc %h %p
和之间插入过滤器。ssh
这样您就可以限制连接。想象一下你的ssh
演讲是这样的:
pv -qL 20K | nc %h %p | pv -qL 10K
发送到服务器的内容ssh
受到第一个限制pv
;ssh
从服务器接收的内容受到第二个限制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 属于什么将会很有用pv
。man 1 pv
详情请参阅。如果您的配置已使用,
ProxyCommand
那么您需要使用 s 包含现有值(而不是nc %h %p
)pv
。如果您的配置已经使用,ProxyJump
那么您需要将其转换为ProxyCommand
,然后用pv
s 包含它。