SSH多重化の制限


26

.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セッションの数に制限はありますか?その制限を変更できますか?それは悪い考えでしょうか?


2
質問に直接答えることはできませんが、問題を追跡するための提案を提供できます。ピアが接続を拒否したため、接続先のシステムのログを確認することから始めます。sshdでエラーが発生するかどうかを確認します。そうでない場合は、LogLevelを上げて再試行してください。すぐにはわからないログメッセージを見つけて、そのフレーズを検索しても役に立たない場合は、ソースコードでgrepを使用できます。エラーメッセージは、一連の条件に囲まれていることがよくあります。そのうちの1つ(またはいくつか)が満たされていなかったため、このメッセージが表示されました。
ショーンJ.ゴフ

回答:


26

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


4

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は1つのグループを構成しています)。「sshwrapper realhost」を発行するときに、開いているチャネルがない場合、3つすべてが開かれ、1つのセッションが開始されます。次回の実行時には、チャネルごとに開いている接続をカウントし、接続が最も少ないチャネルで新しいセッションを開きます。

1つの実際のホストと2つの「偽の」ホストを使用すると、エラーを受け取る前に30回接続できます。ログインは非常に高速ですが、3つすべての制御チャネルがその時点で開かれるため、初期時間が1〜2秒かかります。


スクリプトは実際の時間節約のように聞こえますが、本当に便利です。まだお持ちの場合は、一般の人と共有してもらえますか?
thefourtheye

質問に対する答えではないので、ここでそれが適切かどうかはわかりません。また、私は自分用に書いたばかりで、Macクライアントで実行されます(Linuxサーバーにログインするため)。コードは「ps」出力を解析し、「ps」構文が異なるため、Linuxで実行するには変更する必要があります。
ジョー

けっこうだ。一般的なアイデアを共有してくれてありがとう。
thefourtheye

スクリプトをmoosiefinance.com:8081/sshm.zipに配置しました。
joe

素晴らしい...どうもありがとう...それを見てみましょう
thefourtheye
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.