単一サーバーへの大規模な同時SSHを有効にする


9

私の目標は、1台のサーバーで10000の同時SSHを実行できるようにすることです。

簡単にするために、私はlocalhostにsshしています。

for i in `seq 1 10000`; do
    ssh localhost "echo ${i}; sleep 100"  >>./info 2>>./log &
done

sleep 10010000番目のsshが起動したときに、1番目のsshがまだ接続されていることを確認するためです。これにより、実際には10000のsshが同時に 存在ます

そして、ここに私が得た2種類のエラーメッセージがあります:

1. ssh_exchange_identification: Connection closed by remote host

2. ssh_exchange_identification: read: Connection reset by peer

次の変更を行いました。

  1. /etc/security/limits.confして/etc/security/limits.d/90-nproc.conf、ハードセットソフト&nofilenproc65535(これは右の最大の可能な値である-更新:?なし最大値である。1048576
  2. /etc/sysctl.confkernel.pty.max = 65535
  3. /etc/ssh/sshd_config、を設定しMaxStartups 10000ます。

これらの変更により、1つのサーバーに対して1000の同時ssh s を正常に実行できますが、2000以上のssh s では機能しません。

一部の人々は、の値を変更することが示唆されているMaxSessions(?実際に私はその使用状況については明らかではないよ:どのように私の場合には影響を与え多重ん)、/proc/sys/net/core/netdev_max_backlogそして/proc/sys/net/core/somaxconn、彼らは違いはありませんように見えます。

さらに、それらが異なるサーバーへの10,000の同時ssh sである場合、エラーは発生しません(問題は単一のサーバーにsshする場合にのみ発生します)。

for i in `seq 1 10000`; do
    j=$(( 1 + $i % 8 ))
    ssh server-${j} "echo hi; sleep 100" >info-${j} 2>log-${j} &
done

私はこれにかなり長い間こだわっています。
何か助けていただければ幸いです!


1
sshdサーバーログは、接続を拒否する理由に関する詳細情報を提供できます。基本的に10000セッションだけが必要な場合は、ControlMasterを使用した多重化を使用することをお勧めします(もちろん、MaxSessionsをバンプします)。
Jakuje

1
私はsleep 100sあなたが思うことをしていないと思います。sshセッションではなく、自分のマシンで実行されます。
ダニエルカルマン、2015

1
@Jakujeサーバーログをチェックするように言ってくれてありがとう!を見つけたerror: reexec socketpair: Too many open filesので、以前の値nofile(つまり65535)は十分ではなかったと思います。私はControlMasterに精通していませんが、やってみます、ありがとうございました!! :)
クララ

1
興味深いことに、私が行の1つを実行すると、ps axu | egrep "ssh|sleep" | grep -v grepはだけをリストしsleep 100s、はリストしませんssh。コマンドをに変更する必要があると思いますssh "echo hi; sleep 100s"
ダニエル・カルマン2015

2
@danielkullmannはいsleep 100、その通りです。実際のスクリプトでは、sshを介して送信されるコマンドに含まれているはずですが、ここではタイプミスをしました。それに応じてメインの投稿を更新しました。ご指摘ありがとうございます!!
クララ

回答:


2

/私は彼がコメントできることを望んだ

sshdは(通常、正確なユースケースなどを指定していませんが)ログインごとにptyを割り当てる必要がありますが、この場合、ssh "echo hi; sleep 100s"はptyを割り当てません。 kernel.pty.max設定の必要はありません...何千人ものユーザーがログイン **してテストしない限り、テストに-tオプションを追加する必要があります。ssh -t "echo hi; sleep 100s"

error: reexec socketpair: Too many open files Wheezy distからJessieシステムにアップグレードされたシステムでのテストに関する問題に戻り、/ etc / security / limit *はsshdの制限を変更しないことがわかりました。

cat /proc/<pid-of-sshd>/limits /etc/security/limits.confで設定した後、私の場合、それを確認してください。解決策は、そのulimitコマンドを使用してスクリプト内にulimit -Hn 65535&を強制することであると思われ、sshdのnofilesを1024/4096から65535/65535に引き上げましたulimit -n 65535/etc/init.d/ssh

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