SSHを介してコマンドを実行し、接続を開いたままにする方法は?

SSHを介してコマンドを実行し、接続を開いたままにする方法は?

私が走るとき

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接続を開いたままにして、キャッシュがオンになっているかアクティブである限り、ロードバランサー内の同じシステムとの通信を保証します。

おすすめ記事