.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
オプションMaxSessions
OpenSSH 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秒程度の初期時間を除いて、ログインは非常に高速です。