重启sshd_调整linux服务器sshd的MaxStartups,确保可以并行登录
我是一名云平臺IAAS層的運維開發工程師,今天為大家介紹一個sshd的并行登錄配置MaxStartups.
0x00 為什么有些ssh會概率性失敗
這兩天在寫一個腳本,實現基本功能是: 有一臺中心服務器,很多客戶端服務器會不定時ssh登錄到這臺中心服務器上執行一個腳本. 發現這些客戶端ssh會概率性出現如下報錯:
kex_exchange_identification: Connection closed by remote host
因為這個錯誤不是一直出現,而且所有客戶端都會出現. 為了排查,我將大部分客戶端都關閉了,只剩下一個,這個錯誤就沒有發生了. 然后繼續加大客戶端數量,2個時不會出現錯誤,4個也沒有出現,8個也沒有出現,到16個的時候出現了. 這基本就可以確定是服務端的某個配置導致的.
0x01 模擬并行登錄機器的場景
為了模擬這個并行登錄的場景,我寫了如下python代碼.腳本接受3個參數,分別是要登錄服務的ip,port,要模擬的并行登錄數量. 腳本中使用python3提供的ThreadPoolExecutor多線程來模擬并行登錄.
可以看到,在并行登錄數為1,2,4,8時,都能成功.
當并行登錄數數16時,有報錯.
反復重試幾次,發現總是編號0到9的線程登錄可以成功,編號為10到15的線程無法成功. 看來并行登錄數被限制為10了.
0x02 sshd的MaxStartups配置限制了可以并行認證的客戶端數量
sshd的配置文件/etc/ssh/sshd_config中的MaxStartups是用來限制并行認證ssh客戶端數量的.注意是認證的數量,不是登錄的數量. 也就是說,已經登錄成功的不算在里面.
登錄服務器,查看MaxStartups的值,果然是10
#cat /etc/ssh/sshd_config |grep MaxStartupsMaxStartups 10為了驗證,將其值改為20,然后service sshd restart重啟sshd,再次用16并行登錄,發現都成功了.
然后再使用32并行測試,發現有12個不成功,符合預期.
0xff 總結
一般情況下,我們都是ssh登錄服務器,敲些命令做些事情,基本不存在同時登錄的情況. 但是如果是寫腳本,那么并行登錄的概率就會很大.centos里面sshd的并行登錄客戶端數配置為10,如果發現腳本中概率登錄sshd失敗,報錯Connection closed by remote host,那么需要把sshd的MaxStartups調大,我一般調整為600.
總結
以上是生活随笔為你收集整理的重启sshd_调整linux服务器sshd的MaxStartups,确保可以并行登录的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: endnote咋手动输入文献_endno
- 下一篇: 中getname_Spring IOC中