00:00
大家好。欢迎大家继续收看上硅谷的云计算课程,我是沈超老师,这节课我们继续来说双分支F隐居,之前我们举了一个例子,那我们再举一个例子。干嘛?我想这样做。我想比如说我想干嘛。如果我的服务器当中阿帕奇如果荡掉了。那这样的话,我的网页是不是就没法访问了,对吧?那这个时候如果我的管理员在人工介入,它会有一个延迟,那我能不能这样。我写一个脚本,然后呢,我这个脚本每隔十分钟。或者五分钟运行一次,运行就干嘛就干嘛,就用来检测这个脚,这个阿帕奇,或者某一个服务可以检测阿帕奇,肯定也能检测其他的嘛,我就用来检测阿帕奇有没有宕机。如果我的脚本发现阿帕奇荡掉了,哎也这个通知管理员的同时,我就可以用脚本把服把阿帕奇直接起来了,那只要管理员知道了这个问题有问题,然后让他来检查是什么原因就行了,不需要等到管理员是不是来这个这个来处理,对吧?那如果他检测发现阿帕奇没问题,那么就呃就什么不得不说,或者说就记录一下,我检测了一下阿帕奇没问题对不对,诶这个是也是一个常用的这样一个脚本,在监控之外,我们可以就是呃,直接让脚本来帮我们发现问题之后来进行处理。
01:27
这个也是比较常见的,那怎么办呢?首先啊,我已经提前装好了阿帕奇,我的系统里装的是R偏包了啊,随便装了一个R偏包的快,然后呢,呃,我也把它起来了,那我们确认一下阿帕奇是起来了,巴林端口在哪对吧?那现在就是啊,我怎么监控我或者这个脚本我应该怎么写呢。各位。我前面说的这些东西啊,就我为什么怎么或者怎样写这样脚本,其实就是我说的编程思想。
02:00
但是它每个脚本是不一样的,你们还是要多练,或者说除了要能把我写的脚本能自己照着敲一遍,然后呢,争取把它默下来,最好还是要在里面能加功能,如果你能把功能加进去,证明你这个东西可能就就能写好了,慢慢慢慢你就能自己写了,那好,那我们这里啊,为了上课需要,我们写的脚本都是相对比较简单的,但是都是有用,那怎么办呢?那我提供一个思路,你看行不行是吧。我把八零端口截出来,把它附在一个变量当中。然后呢,我检测变量里的值,只要是八零。我是不是就可以判断,如果这个变量的值是八零,那也就是说我是不是就可以判断系统当中我的八零脚本是这个存在的,那么这个时候是不是阿帕奇就是运行的,那如果我系统脚本运行发现系统中没有八零脚本。那这个时候我是不是就可以判断阿帕奇没有运行,那我就可以通过service的阿帕奇起来是不是就可以了。
03:01
哎,这样做可以吧,可以,那好,那我们那我现在是不是就要把这个八零提出来,那怎么办呢?我问你啊,我能不能就直接这样就行,我直接就在里面找八零。然后呢,只要我能找到八零来,我只要能找到零,就证明阿帕奇是运行的,我甚至都没有必要把这个八零截出来,我甚至都没有必要,那我干嘛?我把这整行附在电量ABC当中干嘛?我找八零吧,只要能找着,这里边是不是就有值啊?我把它付给ABC,我判断这个值是不是为空。哎,它是不是这里边有这个值,是不是为空,它是不是等于空,如果等于空,那么就证明阿帕奇没运行,那我就启动阿帕奇,果不等于空,就证明里边有值,就是为阿帕奇运行了,可不可以?各位看起来是小,但是你忽略了一个问题,什么正则是包含匹配什么意思?你搜八零,除了能找到八零,那我问你808能不能找到?
04:03
8080能不能找吧。180能不能找到,能吧,那因为它是含有就可以列出啊,所以光搜八零这个不行,为啥不够精确。搜八零有值,那么只能证明什么,我里面有可能会有这样的干扰项,那这样的话是不行的,那也就是说我要确认我搜出来的一定得是八零,而不能是什么这些干扰项。对吧,那怎么办呢?这个时候我就说您首先要考虑的是把这一列接出来。把整个端口给接出来,那我们讲过了怎么办。我们直接是不是就是aw k啊,然后我们打印第几列第几第四列吧,1234对,那我把第四列端口打出来,哎,前面有干扰项没事儿,为啥前面看它是这一行的第四列是这个对吧,这一行的第四列是这个,但是无所谓啊,我待会儿是截八零嘛。
05:08
你这两个干扰项是不是就就直接被排除了,对吧,好了,那我现在截出来了,那我问你。我现在能够直接结八零了吗?哥嘞,那我能不能这样结了,你看在里面再去截截什么。巴林结尾。可不可以?哎,如果这里结八零结尾的没问题啊,我就可以排除什么808对吧,或者是只要八零后面还有别的数,比如说1万啊,随便吧,880808085。这些是不是就全都能排除了,因为它不是以八零结尾的,对吧?但是那它能排除什么,能不能排除180?或者是8080能不能。是不是也不行还不行,所以光加结尾还不行,那我要干嘛,各位这个时候我是不是不光要判断结尾,我是不是还要判断开头啊,但是这个字符串的开头是末号啊。
06:09
哎,那大家的开头只要是端口的都是冒号。都什么号啊,那这个时候是不行的,那怎么办,那我这个时候我就要考虑一件事了,什么,我是不是就需要考虑结什么这个数字。或者说其实没那么复杂,有人说那老师我用T来截,这用问号的分割符1234截第四列,然后判断它是不是这个,没那么复杂简单啊,只要这样判断就行了,看看。左右两侧加相位符。八零前段必须是末号,八零必须是结尾,那我问你180不行了吧?8080是不是也不行了,8080。也不行了吧,我要求的是八零,前面是必须是报号,其次必须是结尾,对吧?那这样的话是不是就把其他所有可能都排除了,那你就说如果我这个时候还能检测到以末号八零结尾的这样一个符号,那就证明一定是阿帕奇好了,那我现在只要能看到这个符号,我是不是就证明阿帕奇是运行的?
07:16
OK,行了,把这个判断出来了,那我们的这个脚本就写,基本就写完了,来F2点好。哎,那我们写一下,比如说我把变量把它附在AA当中。等于。把这个命令直接写进来。直接写进来,然后呢,把这个结果是变量A当中,然后呢,FF,然后呢,干嘛直接判断什么。Dollar a就里面有没有值就行了,都不需要再判断别的,判断Dollar a干嘛?是不是等于空?哎,直接判断它里边有没有值。那么如果为空证明什么?
08:03
啊,如果没空证明什么。如果为空,是不是证明阿帕奇没启动,里边没找到莫号巴伦结尾的东西对不对?那么这个时候干嘛?首先鲍捷,比如说埃阿帕奇S大。Master。必须重启,然后呢,不光要报警吧,我是不还应该干嘛。把阿帕奇是不是给开开对吧。好各位,这个时候我们就不太建议什么。把这块写成service service是一个快捷方式,有可能在脚本中会出问题,所以建议写成这样好了,启动的时候是不是会有提示信息啊,这个提示信息对我来讲就用着直接干嘛扔好了,这是如果没有检测到,就是如果发现八零是空的。这个里边是空的,证明阿尔帕没运行,那如果运行了呢,那我们就直接写,随便写一个吧,比如说HTTPOK是正常的,不需要再操任何操作,好,就是这么简单。
09:10
好行,那我执行一下试试啊。那我们称之Mo的75a2.sh好了,那我们可以看一下,呃,我们的八零现在是正常的对吧,那我们执行一下f2.sh好,他说阿帕奇is OK,对吧,那我把它关掉啊,我把阿帕奇关掉。好,关掉了,那我们查一下,这里现在是没有八零的对吧,那我们执行一下F2,好,他说阿帕奇大必须重启,那起来了吗?我这里面脚本里是不是还会让他重启,有这样一个工作对吧?那我们看一下起来了吧。哎,那这样的话,我们就可以知道这个脚本干嘛。这个脚本现在是不是正常运行了,OK,好,这个脚本其实我说虽然非常简单啊,但是基本的功能是有的了,哎,如果你要愿意,你就可以补充,补充就可以放在自己的服务器上,比如说报警,别输出一句话了,写个邮件告诉你,你检测完是正常了啊,或者说就正常,你就别报警了,就不不正常,你再报个警,然后就行了,对吧,就可以就行。
10:23
但是这里有一个小问题是吧,如果这个脚本,比如说巴黎,我们这个脚本是用来检测巴黎端口是不是在对吧。但是有没有这种可能?是吧?阿帕奇是正常的,八零账号也在,但是呢,访问人数太多了,把阿帕奇直接给挤爆了。也就是说,进程虽然还在这儿,端口也在,但是它已经不应答了,你的访问也已经出问题了。那如果通过检测端口,这种情况它是没法排除的,当然我说这种情况,其实如果真的是发生这种情况,我们的监控服务器也会发现问题,为啥他的那个监控那个流程图,你的那个往那个什么CPU占比啊,包括流量啊都会超标,你可能还真不一定非要用这种小脚本来报警,但是我们也要考虑这个问题啊,就是写脚本就是啥。
11:18
你考虑的越全面,它出了问题就越小,Bug就越少,对吧,那其实正常情况下检测这个端口就已经可以用,但是我们现在说,那我是不是要考虑端口卡死了,他不一定拿了这种情况,那这个时候就必须要用到我们在这里真正写的这个了,干嘛这。我们就需要用到一个叫n map命令了,各位,这是一个扫描命令,它的原理是客户端,就是某台电脑给这台服务器所有的端口发信息,看他回不回复我,回复我证明我就知道他这里有这台端口了,哎,那也就说我会给这个八零端口发个信息,然后看他回复我就给所有端口都给他发信息,看哪个端口回复我,他的格式是这样的。
12:08
N map杠小S大T啊TCP协议来扫,然后呢,S是扫描后面指你扫哪一台电脑,然后他就会找到啊,你这台电脑上有哪些东西是开的,那如果找了八零这个是啥?我给你八零发了一个。信息你回应我,我才知道你的八零是开的,所以呢,这个就可以证明阿帕奇是可以正常应答的,那就可以解决这个问题,那这个唯一的问题在于啊,这个家伙。这个家伙唯一的问题在于啥?这个家伙他扫描的速度是非常慢的,他要扫描整机所有可能的端口,所以啊,我们试试啊呃,我想扫描我本机,我是44.8n map可能还没装,没装啊,那么要么装一下。
13:02
这个东西是一个Linux下异常强大的扫描工具啊,甚至很多攻击都是要通过n map先进行扫描啊。好,N map-S-T扫我本机,我自己扫自己。44.8。好,但这块还挺快的,我能发现八零端口是开的对吧,好这个时候我就干嘛,我是不是就可以尝试,好我能判断它了,那我是不是就可以知道了,看我干嘛了。同样是结。截什么呢?首先截TCP协议,干嘛把其他的协议,有可能有其他的东西的端口,就把这些干扰项全部都干掉。OK,所以我先在里面去截TCP,把干扰项都干掉,然后呢,剩下的是不是就是这些端口啊。对吧,然后我去找里边去找HTP,哎各位这个就没有没有什么没有这个不像180或者8080有干扰项了,对吧,我这里这个只有阿帕奇手的这个进程名是不是才叫这个,所以我就可以直接干嘛去接。
14:10
HTP对吧,如果能找到,其实就证明它已经是存在了,但是呢,我为了保险期间我还截了第二列,第二列是啥,就是打开的,哎,我怕我找到的东西是什么,无意拿了,或者这个这个什么什么,反正就是异常状态,我怕这个,所以我就才想截一下这个open状态。那截出来之后,首先我前面就已经把其他的协议是不是都已经过滤掉了,这是不是只剩阿帕奇议中可能,然后我在里面干嘛,在截出来什么。现在截出来什么?第二列,第三列。那这样的话,这个这条命令的里面是不是它就是这个值,哎,第二第二。是不是就是这个状态,那我只要判断这个状态是open是打开的对吧,证明阿帕奇是运行的,就直接报,就说阿帕奇OK就行了。
15:07
那如果我否则我发现它不是open,或者根本就没找着,里边就没东西证明阿帕奇是有问题的,重启阿帕奇,然后报警说我的阿帕奇是在什么时候重启了,写在日志里,这样的话我们是不是查日志就可以知道?诶,这是两种方法,其实思路是一样的,都是什么找到阿帕奇正唱启的状态。然后把它写在脚本里,然后通过通过判断这个变量的值来判断阿帕西是不是运行,就这么简单。只不过呢,我说。直接判断八零端口呢,相对简单,但是呢,这个方法有可能会出现就是它卡死了,你没办法,这个这个八零端口还在,但是不应答的情况。用N来扫呢,它就更准确了,它只有这个八零端口是应答的,NF才会得到这个恢复信息,唯一的问题就是NF扫起来有可能会慢,那所以其实我们大多数情况下还是推荐大家用这个,就是用我们前面写的这个还是推荐。
16:08
啊,当然我再说啊,我们写的都只是基本功能,如果你愿意,可以在里面再加更多的功能,我们只是抛砖啊。好了各位,那这节课呢,就这样,我们举了两个例子,又来解释一下双分支的if语句,那这节课就这样,我们下节课再见。
我来说两句