単一サーバーに対して大規模同時SSHを有効にする

単一サーバーに対して大規模同時SSHを有効にする

私の目標は、10000同時実行を許可することですSSH運転中一つ仕える人。

作業を簡単にするために、SSHを介してlocalhostに接続します。

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

sleep 10010,000番目のSSHが起動したときに最初のSSHがまだ接続されていることを確認することです。したがって、実際には10,000個のSSHがあります。同時に SSHS.

以下は、私が受け取った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.confSoft&hard nofile&をnproc65535に設定します(可能な最大値が正しいですか? - 更新:いいえ。最大値は次のとおりです)。1048576)
  2. /etc/sysctl.conf、おそらくkernel.pty.max = 65535
  3. /etc/ssh/sshd_config、設定MaxStartups 10000

この修正により、1000個の同時実行を正常に実行できました。SSH単一のサーバーにありますが、2000以降では機能しません。SSHS.

MaxSessions/proc/sys/net/core/netdev_max_backlog何人かの人々は値を変更しようと提案しましたが(実際には使い方が明確ではありません/proc/sys/net/core/somaxconn

さらに、10,000並行性ではエラーは報告されません。SSH到着その他サーバー(サーバーに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 は、ログインごとに pty を割り当てるために必要になります (通常は正確なユースケースなどを指定していませんが)。 ptyには.max設定が必要です...何千人ものユーザーが望まない限り録音済みin*... これをテストするには、テストに -t オプションを追加する必要があります。 ssh -t "echo hi; 100秒間スリープ"

JessieシステムへのWheezy distアップグレードテストに戻り、error: reexec socketpair: Too many open files /etc/security/limit*がsshdの制限を変更しないことを発見しました。

私の場合は、/etc/security/limits.confで設定して確認してくださいcat /proc/<pid-of-sshd>/limits 。 * nofile Soft 65535 * nofile hard 65535は依然としてsshd制限の1024(ソフト)および4096(ハード)のみを報告します。解決策は、ulimitコマンドを使用してスクリプト内で&を強制的に使用するようですulimit -Hn 65535。 sshdのnofilesを1024/4096から65535/65535に増やしました。ulimit -n 65535/etc/init.d/ssh

おすすめ記事