zoukankan      html  css  js  c++  java
  • 服务器账号过期处理

    服务器账号过期处理

      这个事故发生在昨天,也就是周日早上10点多,公司开发钉我说服务器登陆不上,说挂在上面的定时抓取任务没跑(今天给我说,他以为停电,这脑洞有点大哈,停机应该是所有那批服务器都登不上)。当时以为很快能解决,咋知道搞到下午1点半,害我打不了球 = =

      登陆服务器,报错这样(无论是普通用户su过去、云控制台直接连、同网段机器ssh跳过去,都一样的报错),然后不止一台,是两台机器都这样:

        后来再查cron日志,原来早上8点账号就开始过期。独属于我的钉钉监控群也特多报警,说监控脚本没跑

     

        记得我写过一篇:服务器和mysql账号密码过期时间监控【https://www.cnblogs.com/windysai/p/14334173.html】

      粗心了,发现脚本只部署了做过等保的一个服务器上,另外一个,忘记了。

      查了下,说唯一解决办法,重启进入单用户模式改过来,意味着关机。非常重要的两台机器:入口服务器+主应用服务器。幸好我完善过架构,不仅入口做了主备,应用也做了一主两备。

      因为入口在WAF防护下,域名解析做了CNAME记录指向WAF,现在要停入口服务器,意味着需要把解析切回到源站ip, 本来是这台入口服务器ip的,现在需要切到备用的入口服务器。

    所以第一件事,去掉WAF防护,域名CNAME解析到WAF的记录去掉,添加A记录指向备用入口服务器(有公网ip)。

    确认了解析生效后,(ping 域名应该返回的是备用入口服务器公网ip)

    第二件事,备用入口服务器开nginx,转发到应用服务器的备机上。

      上面两件事做完后,联系云控制台技术,叫帮忙重启到单用户模式。查过,确实服务器账号全部过期。想想就是2019年做的等保,有一项检查说账号不能设置永不过期,当时随意设置了个时间,没想到就是双十二,就是周日,额。。。。

       直接给账号重新设置过期时间就解决了,不过确实坑惨我了(自己坑自己)

    usermod -e 99999 root

      今天上班给领导说清楚这故障的来龙去脉之后,要我做监控。当时给他说,脚本要部署到要监控的所有机器上,因为要运行命令chage -l 用户去查过期时间。

      他说叫我整理所有服务器的账号和过期时间,写到一个文本上,然后脚本去读,就不需要部署到要监控的所有服务器上了。其实挺好的,只要不多手,去改这个文本的过期时间。

      于是有了下面的脚本

    1、整理的账号过期列表(文件:list)如下:

    服务器1 服务器1的hostname 服务器1的ip
    账号1 2243-10-16
    root 2243-10-16
    账号2 never
    账号3 never
    
    服务器2 服务器2的hostname 服务器2的ip
    账号1 never
    账号2 never
    root never
    。。。。

    2、监控脚本如下:

    #!/bin/bash
    
    #测试
    TOKEN="xxxx"
    PHONE="我的手机号"
    DATE=`date +%F_%T`
    
    ## 少于5天报警
    JUDGE_DAY=5
    
    cat list |while read line
    do
            data=$(echo $line | grep "服务器")
            
            # 无关键字"服务器"的行:获取账号过期时间
            if [ "$data" == "" ]; then
               t_acc=`echo $line | awk '{print $1}'`
               
               # 跳过空行
               if [ "$t_acc" != "" ]; then  
                  #1、获取账号
                  user_name=`echo $t_acc`
                  echo $user_name
                  
                  #2、账号过期日期
                  Expireddate=`echo $line | awk '{print $2}'`
    
                  # 如果是"never" 永不过期,不处理
                  if [ "$Expireddate" != "never" ]; then
                      # 获取年月日
                      account_end_year=`echo $Expireddate | awk -F '-' '{print $1}'`
                      account_end_month=`echo $Expireddate | awk -F '-' '{print $2}'`
                      account_end_day=`echo $Expireddate | awk -F '-' '{print $3}'`
                      account_end_date_s=`/bin/date -d "${account_end_year}"-"${account_end_month}"-"${account_end_day}" +%s`
    
                      echo ${account_end_year} ${account_end_month} ${account_end_day}
                      #sleep 2  
                      check_date_s=`/bin/date +%s`
                      #天
                      let account_diffday=(${account_end_date_s}-${check_date_s})/86400
                      let account_diffday++
                      echo "用户 $user_name 账号过期时间还剩:  ${account_diffday} 天 !!!"
                              
                      ## 过期少于5天,则报警
                      if [ ${account_diffday} -le ${JUDGE_DAY} ]; then
                          curl -H "Content-Type:application/json" -X POST --data '{"msgtype":"text","text":{"content":"当前时间:'$DATE'  \n'${server}''${serverip}'\n账号:'${user_name}'  过期还剩 '${account_diffday}' 天\n过期时间:'${Expireddate}'"} , "at": {"atMobiles": ['${PHONE}'], "isAtAll": false}}' ${TOKEN} > /dev/null 2>&1
                      fi
                   fi
                fi 
                 # 有关键字:服务器,获取服务器和ip
             else 
               
                    server=`echo $line | awk '{print $2}'`
                    serverip=`echo $line | awk '{print $3}'`
    
              fi
    done 

    3、效果图:

    总结

      最近老是挖坑给自己,罪过罪过,顺带聊聊感受。

      (1)入口和应用服务器各自切换到备用服务器的时候(原入口在WAF防护下,备用入口不是),因为要去掉WAF解析,云控制台去掉不一定生效,很大可能要联系WAF技术帮忙切换。

      (2)切换完之后,联系云厂商技术帮进入单用户模式,整个沟通过程是耗时最长的,各种打客服电话转技术。(事后他们说我也能进去单用户模式,还写了操作文档给我,有机会试试)

      (3)切换完之后,网络很不稳定,不定时说网站响应时间慢。话说入口和备用入口用同一条共享100M,未知原因。

       (4)当源站从WAF切换到备用入口机器ip时,WAF帮做的强制域名转发没了。

      就是,假设我们访问域名:ljy.com,未切回源站前,WAF会帮我们强制转发到:www.ljy.com。证书安全,切换走之后,就不安全了。(这个有点坑,在nginx配置强制跳转不起效的)

       (5)这件事给我唯一的好处是,真真正正做了一次应急演练 = =。死了入口和主应用,会投诉、要写故障报告的业务照样跑的好好的,中心那边神不知鬼不觉,天塌下来就我知,嘘。。。

  • 相关阅读:
    GAE 1.5.1 SDK Prerelease
    GAE 1.5.1 SDK Prerelease
    SVN 分支更新与合并
    暂时告别 CSDN 博客,移居 GAE(http://88250.b3log.org)
    暂时告别 CSDN 博客,移居 GAE(http://88250.b3log.org)
    NetBeans 时事通讯(刊号 # 152 Jun 22, 2011)
    NetBeans 时事通讯(刊号 # 152 Jun 22, 2011)
    NetBeans 时事通讯(刊号 # 151 Jun 15, 2011)
    SVN 分支更新与合并
    NetBeans 时事通讯(刊号 # 151 Jun 15, 2011)
  • 原文地址:https://www.cnblogs.com/windysai/p/15685420.html
Copyright © 2011-2022 走看看