एकल सर्वर के लिए बड़े पैमाने पर समवर्ती एसएसएच सक्षम करें


9

मेरा लक्ष्य एकल सर्वर पर 10000 समवर्ती ss को चलाने की अनुमति देना है।

सादगी के लिए मैं लोकलहोस्ट के लिए ssh-ing हूं:

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

sleep 100यह सुनिश्चित करने के लिए कि जब 10000 ssh शुरू होता है, तो 1 ssh अभी भी कनेक्शन में है इसलिए वास्तव में 10000 समवर्ती ssh हैं

और यहां मुझे दो प्रकार के त्रुटि संदेश मिले हैं:

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, सेट नरम और कठिन nofileऔर nproc65535 के लिए (?। -: कोई अधिकतम मूल्य है अद्यतन इस अधिकतम संभव मूल्य सही है 1048576 )
  2. में /etc/sysctl.conf, सेट मेंkernel.pty.max = 65535
  3. में /etc/ssh/sshd_config, सेट में MaxStartups 10000

ये संशोधन मुझे एकल सर्वर पर 1000 समवर्ती ssh को सफलतापूर्वक चलाने की अनुमति देते हैं , लेकिन वे 2000 और उससे अधिक ssh s के लिए काम नहीं करते हैं ।

कुछ लोगों ने मूल्य बदलने का सुझाव दिया है MaxSessions(वास्तव में मैं इसके उपयोग के बारे में स्पष्ट नहीं हूं: मल्टीप्लेक्सिंग मेरे मामले को कैसे प्रभावित करता है?), /proc/sys/net/core/netdev_max_backlogऔर /proc/sys/net/core/somaxconn, लेकिन उन्हें कोई फर्क नहीं पड़ता है।

इसके अलावा, वहाँ कोई त्रुटि है, तो वे कर रहे हैं 10000 समवर्ती 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 सर्वर लॉग कनेक्शन खारिज करने के कारण के बारे में अधिक जानकारी प्रदान कर सकता है। मूल रूप से यदि आप सिर्फ 10000 सत्र चाहते हैं, तो मैं आपको सलाह दूंगा कि आप कंट्रोलमास्टर (और फिर निश्चित रूप से टकराए मैक्सिकन) का उपयोग करके मल्टीप्लेक्सिंग का उपयोग करें।
जकूजी

1
मुझे नहीं लगता sleep 100sकि तुम क्या सोचते हो। यह ssh सत्र में निष्पादित नहीं होता है, बल्कि आपकी अपनी मशीन पर होता है।
daniel kullmann 13

1
@ Jakuje सर्वर लॉग की जाँच करने के लिए मुझे याद दिलाने के लिए धन्यवाद! मैंने पाया error: reexec socketpair: Too many open files, इसलिए मुझे लगता है कि पिछले मूल्य nofile(65535) काफ़ी दूर था। मैं ControlMaster से परिचित नहीं हूँ, लेकिन मैं यह कोशिश करूँगा, धन्यवाद !! :)
क्लारा

1
दिलचस्प है, जब मैं लाइनों में से एक को निष्पादित करता हूं, ps axu | egrep "ssh|sleep" | grep -v grepकेवल एक सूची होती है sleep 100s, न कि ssh। मुझे लगता है कि आपको कमांड को बदलना चाहिए ssh "echo hi; sleep 100s"
daniel kullmann

2
@danielkullmann हाँ आप बिलकुल सही हैं - sleep 100ssh के माध्यम से भेजे गए कमांड में होना चाहिए, जो कि मेरी वास्तविक स्क्रिप्ट में मामला है, लेकिन मैंने यहाँ एक टाइपो बनाया है। मैंने अपने अनुसार मुख्य पोस्ट को अपडेट किया है। इसको इंगित करने के लिए बहुत बहुत धन्यवाद !!
क्लारा

जवाबों:


2

/ काश वह टिप्पणी कर सकता है

sshd की जरूरत है (आमतौर पर, लेकिन यद्यपि आपने सटीक उपयोग के मामले को निर्दिष्ट नहीं किया है) आदि के लिए प्रति लॉगिन एक pty आवंटित करें, हालाँकि, आपके मामले में, ssh "इको हाय; स्लीप 100s" एक pty आवंटित नहीं करता है, इसलिए जब तक आप हजारों उपयोगकर्ता लॉग इन करना चाहते हैं, तब तक kern.pty.max सेटिंग ... के लिए कोई ज़रूरत नहीं है ... यह परीक्षण करने के लिए, आपको अपने परीक्षणों में -t विकल्प जोड़ने की आवश्यकता होगी, अर्थात। ssh -t "इको हाय; स्लीप 100s"

इस मुद्दे पर वापस error: reexec socketpair: Too many open files जेसी प्रणाली के लिए उन्नत व्हीजी-अपग्रेड पर टेस्ट के साथ हाथ में , मैंने पाया कि / etc / सुरक्षा / सीमा * sshd की सीमा नहीं बदलती है।

जांचें कि cat /proc/<pid-of-sshd>/limits मेरे मामले में /etc/security/limits.conf में सेट करने के बाद: * nofile सॉफ्ट 65535 * nofile हार्ड 65535 अभी भी sdd की सीमा के लिए केवल 1024 (सॉफ्ट) और 4096 (हार्ड) रिपोर्ट करता है। रिज़ॉल्यूशन उस ulimit कमांड का उपयोग करते हुए स्क्रिप्ट के अंदर ulimit -Hn 65535और ulimit -n 65535अंदर बल देने के लिए प्रतीत होता है /etc/init.d/ssh, मैंने sshd की nofiles को 1024/4096 से 65535/65535 तक बढ़ा दिया है

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.