调整linux服务器sshd的MaxStartups,确保可以并行登录

云计算分享者 2024-02-24 02:14:01

我是一名云平台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.

0 阅读:0

云计算分享者

简介:感谢大家的关注