私が走るとき
FOO=$(ssh -L 40000:localhost:40000 [email protected] cat /foo)
コンテンツを取得しました/foo
が、接続が切断されました。
私が望むのは、何らかの方法でコンテンツを取得し、/foo
ポート40000がまだ同じサーバーに転送されるように接続を開いたままにすることです。可能ですか?
このように2つのSSH接続を発行してみてはいかがでしょうか?
FOO=$(ssh [email protected] cat /foo)
ssh -L 40000:localhost:40000 [email protected] -f -N
私の場合、これを行うことができない理由は、ip(1.2.3.4
)が複数のランダムなバックエンドに接続を渡すロードバランサーであるためです。 SSH経由で別のコンピュータに接続するたびに、1.2.3.4
コンテンツ/foo
はコンピュータによって異なります。また、転送されたポート(40000)を介して送信されるデータは、/foo
.Aコンピュータのコンテンツをスクラップし、/foo
ポート40000を介してBコンピュータにデータを送信しても機能しません。
ベストアンサー1
説明する内容をSSH多重化といいます。
DevOps設定でこの設定を使用して、すべての仮想マシンへの接続をキャッシュします。
これにより、すべての新しいコマンドでSSH接続全体を再ネゴシエートし、ユーザーを認証することなく最大30分間同じ接続を再利用/キャッシュできます。
VM/サーバーに(複数の)コマンドを継続的に送信すると、速度が大幅に向上します。
設定はクライアント側で行われ、30分キャッシュの場合は/etc/ssh/ssh_config
次のように設定できます。
ControlPath ~/.ssh/cm-%r@%h:%p
ControlMaster auto
ControlPersist 30m
このMaxSessions
パラメーターは、ssh_config
同時に接続が許可される多重接続の数を定義します。デフォルトは10です。より多くの接続を同時にキャッシュする必要がある場合は、それを変更する必要があるかもしれません。
たとえば、最大20個のキャッシュされた接続の場合:
MaxSessions 20
詳細については、次を参照してください。OpenSSH/料理本/マルチプレックス
SSH多重化の利点は、新しいTCP接続を作成するオーバーヘッドを排除することです。
...
2 番目以降の接続は、新しい SSH 接続ごとに新しい TCP 接続を作成することなく、確立された TCP 接続を繰り返し再利用します。
また見てくださいSSH多重化の使用
SSH多重化は、単一のTCP接続を介して複数のSSHセッションをホストする機能です。
多重化を使用しない場合、SSHクライアントはこのコマンドを実行するたびにリモートホストとの新しいTCP接続と新しいSSHセッションを確立する必要があります。多重化を使用すると、特定の期間アクティブである単一のTCP接続を確立し、その接続を介してSSHセッションを確立するようにSSHを構成できます。これにより、リモートSSHホストに対してコマンドを繰り返し実行すると速度が上がります。
最後に、多重化はクライアントとサーバー間のTCP接続を開いたままにして、キャッシュがオンになっているかアクティブである限り、ロードバランサー内の同じシステムとの通信を保証します。