批量检测服务器状态

一个网友反馈批量在腾讯云购买的服务器10台部分连接失败!!这里连接失败特指使用服务器秘钥的方式登录失败。我这边也模拟用户的场景复测了一下一次性购买20台服务器,大概思路:

  • 是先判断端口是否工作正常,如果不正常再来根据情况排查
  • 再来通过脚本批量测试秘钥登录服务器,是否有异常。

这里拆分两块来完成,分别是检测端口是否工作正常和通过秘钥方式来模拟登录服务器。

先确认端口是否工作正常

如何批量检测这些服务器端口是否正常是摆在眼前的一个问题,当然检测服务器端口是否正常有很多方式,哪种是最快的让我想到以下方式推荐大家。
首先下载nc (或叫netcat)

1
yum install nc

编辑以下Shell脚本。

1
2
3
4
5
6
7
8
9
10
#!/bin/bash
port=80
while read line
do
if nc -z -w1 $line $port ;then
echo $line $port "ok"
else
echo $line $port "fail"
fi
done < iplist

nc 命令的参数解释:

  • -z 表示zero,表示扫描时不发送任何数据
  • -w1 超时秒数,后面跟数字

它也可以写成一行

1
if nc -z -w1 ip 80 ;then echo "ok"; else echo "fail"; fi

将要测试的IP放到ipList文件中,然后执行脚本效果如下。

再来确认秘钥登录

这里可以使用expect脚本来实现,脚本如下

1
2
3
4
5
6
7
8
9
#!/usr/bin/expect
set timeout 3
set host [lindex $argv 0]
set command [lindex $argv 1]

spawn ssh -i djangowang.pem root@$host $command
expect "*connecting"
send "yes\r"
interact

参数解释

  • djangowang.pem 为服务器秘钥
  • host为检测服务器IP
  • command 为执行的命令