重启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多线程来模拟并行登录.

dbeb6860a14cf9f782f9dd377f181e2d.png

可以看到,在并行登录数为1,2,4,8时,都能成功.

42cac20ef8685cc2d06b43c6e534b65e.png

当并行登录数数16时,有报错.

5c649e6f6f6bfd5b971ee98fc67d5211.png

反复重试几次,发现总是编号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并行登录,发现都成功了.

f69874ebef3cd7201f877743e8f25af0.png

然后再使用32并行测试,发现有12个不成功,符合预期.

240f0140e38ec6823e7d03acd28077a9.png

0xff 总结

一般情况下,我们都是ssh登录服务器,敲些命令做些事情,基本不存在同时登录的情况. 但是如果是写脚本,那么并行登录的概率就会很大.centos里面sshd的并行登录客户端数配置为10,如果发现脚本中概率登录sshd失败,报错Connection closed by remote host,那么需要把sshd的MaxStartups调大,我一般调整为600.

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值