SSHクライアントが「オープンファイルが多すぎます」というエラーが発生したため、接続を拒否します。

SSHクライアントが「オープンファイルが多すぎます」というエラーが発生したため、接続を拒否します。

コンピュータでリバースSSHクライアントを実行します。しばらくすると、接続拒否要求が受信され、SSH クライアントにログインすると表示されます。

Oct 12 00:21:19 ipaserver0 reverse-tunnel.sh: debug3: チャネル 1018: 接続を待っています

10月12日 00:21:19 ipaserver0 reverse-tunnel.sh: debug1: チャネル 1018: 接続に失敗しました: 接続が拒否されました。

10月12日 00:21:19 ipaserver0 reverse-tunnel.sh: ソケット: 開いたファイルが多すぎます。

ここで問題が何であるかよくわかりません。 SSHトンネルがサポートできるチャネル数に制限はありますか?

答え1

プロセスが開くことができるファイル記述子の数には制限があります。 SSHトンネルには、クライアント側とサーバー側の接続用のファイル記述子が必要です。したがって、チャネル数が制限されています。

Linuxではlsof。すべてのプロセスのファイルが一覧表示されます。-c sshコマンド名または特定のプロセスを使用して、リストされている-p pidプロセスを制限できます。

答え2

私も同じ状況に直面した。
サーバー側とクライアント側の両方でファイルを開く制限を設定する必要があることに注意してください。
ポート転送がある場合は、転送プロセスも設定する必要があります。

SSH配信プロセス

たとえば、Host0 が実行されている場合

ssh -fNL :1234:host2:1234  host1

その後、プロセスを取得します。

  • ssh @host0
    //sudo netstat -ltnp | sudo netstat -ltnp | ssh @host0 //sudo netstat -ltnp |
  • sshd @host1
    //sudo netstat -atnp | sshd @host1 //sudo netstat -atnp | sshd @host1 grep :1234 (接続後
    //pgrep -af "sshd: $USER\s*$" 実行)

トポロジー:

client ----> ssh ===tunnel=== sshd ----> server

ssh(-L、-R)はアプリケーション層で将来実行され、
各接続にはTCPソケットfdが必要です。

// 接続数が多いとパフォーマンスが低くなります。

プロセス実行のため

NOFILEの制限事項を確認してください。

$ prlimit -p 1930 -n
RESOURCE DESCRIPTION                 SOFT    HARD UNITS
NOFILE   max number of open files 1048576 1048576 files

NOFILE制限の変更

prlimit -p 1930 -n1048576

現在の対話型bashの場合

確認する

$ ulimit -n
1024

変化

ulimit -n 1048576

関連情報