SSH多重化の限界

SSH多重化の限界

.ssh/config私のファイルには次のエントリがあります

Host AAA
    User BBB
    HostName CCC
    ControlMaster auto
    ControlPath ~/.ssh/%r@%h:%p

上記の方法を使用すると、新しいセッションが必要なときはいつでもパスワードを入力することなく、同じSSH接続を介して複数のSSHセッションを再利用できます(デフォルトの接続が開いている限り)。

ただし、多重接続数が比較的多い場合(〜7)、同じ多重接続にさらにセッションを追加することはできず、次のエラーが発生し始めます。

> ssh -X AAA

mux_client_request_session: session request failed: Session open refused by peer
Password: 

私の質問:

このエラーが発生するのはなぜですか?同じ接続で多重化できるSSHセッションの数に制限はありますか?この制限を変更できますか?これは悪い考えですか?

答え1

サーバーのデーモンは、sshdネットワーク接続あたりのセッション数を制限します。これはMaxSessions/etc/ssh/sshd_config。またMaxStartups、多数のセッションを使用している場合は、このオプションを増やすことをお勧めします。 (詳細については参考資料を参照してください。)制限修正man sshd_configオプションMaxSessionsOpenSSH 5.1で導入されましたこの数字は以前は10に固定されていたようです。MaxSessionsサーバーが超過すると、サーバーsshd[####]: error: no more sessionsログに表示されます。

答え2

以前のバージョンのOpenSSHを使用しているサーバーでこの問題が発生しました。私はサーバーを制御し、命名設定に2つのCNAMEを生成することで問題を解決しました。

realhost.myexample.com.      IN  A       XXX.XXX.XXX.XXX
realhost2.myexample.com.     IN  CNAME   realhost.myexample.com.
realhost3.myexample.com.     IN  CNAME   realhost.myexample.com.

次に、ローカルSSHクライアント構成で次の操作を行います。

ControlMaster auto
ControlPath ~/.ssh/%r_%p_%h

host realhost
hostname realhost.myexample.com

host realhost2
hostname realhost2.myexample.com

host realhost3
hostname realhost3.myexample.com

ControlPathステートメントは、制御ソケット名が互いに競合しないようにするためのものです。

それはすべてです。しかし、管理しやすくするために、クライアント側で「ssh」のラッパースクリプトを作成しました。ホストの「グループ」が存在することを知っています(この場合はrealhost、realhost1、realhost2)。 「sshwrapper realhost」を実行しているときに開いているチャンネルがない場合、3つのチャンネルがすべて開き、セッションが開始されます。次回実行すると、チャネルごとに開かれた接続数が計算され、接続が最も少ないチャネルで新しいセッションが開きます。

1つの物理ホストと2つの「偽」ホストを使用すると、エラーが発生する前に30回接続できます。この時点で、3つの制御チャネルがすべて開いているため、1〜2秒程度の初期時間を除いて、ログインは非常に高速です。

関連情報