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
それに対応するもの(正しい構文でSSHサーバーへのraw TCP接続を提供するすべて)nc
。サーバーと通信するには、コマンドの標準入力に書き込み、コマンドの標準出力から読み込みます。ソールが接続されていないのとほぼ同じです(内部で動作している場合)。ncat
socat
ssh
nc %h %p
ProxyCommand
ssh
nc
秘密は、両側と間にnc %h %p
フィルタを挿入できることです。ssh
これにより、接続を制限できます。あなたのssh
スピーチが次のようになると想像してください。
pv -qL 20K | nc %h %p | pv -qL 10K
サーバーに送信されるコンテンツにはssh
最初の制限が適用されpv
、ssh
サーバーから受信されるコンテンツには2番目の制限が適用されますpv
。
ssh
上記のコマンドで会話を実行するには、次のように呼び出します。
ssh -o ProxyCommand='pv -qL 20K | nc %h %p | pv -qL 10K' …
メモ:
この方法を使用すると、SSH接続全体、それを通過するすべて、すべてのトンネル、X11転送、およびその他のセッション(接続共有の場合)を制限できます。すべて。 raw 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
いつでもスロットルを調整できます。これを行うには、PIDがどこに属しているかをpv -P
内部にProxyCommand
知らせると便利ですpv
。man 1 pv
詳細より。構成ですでにsを使用している場合は、sを使用して(代わりに)
ProxyCommand
既存の値を含める必要があります。設定ですでにそれを使用している場合は、それをに変換してsと一緒に含める必要があります。nc %h %p
pv
ProxyJump
ProxyCommand
pv
答え2
1つのオプションは、ルータのポート22にQoSを適用することです。
水滴はい軽量ユーザースペース帯域幅シェーパー。またすることができますデーモンとして実行、一度に複数のセッションを管理できる役割です。
別の可能性は、次のようなものを使用することです。HTB初期化プログラム- スクリプトまたはIP_リレー。
~によるとこの議論、iptablesを使用してパケットフローを制限することもできますが、これは私の選択ではありません。むしろ帯域幅を直接制限したい。