一次简单实现登录多系统的需求小程序

【环境介绍】

  系统环境:Linux + shell

  

【背景描述】

需求:由于数据库维护较多同时涉及较多的系统类型,对于不熟悉系统的同事来说,及时登录一些数据库显然是需要时间,登录虽然简单,先查到信息再登录系统,显然会降低效率。为了解决这个问题,同事建议是否能写个脚本,能比较方便的登录系统。

对于这个问题,考虑的问题如下:

1,  从一台主机登录多台主机,相当于跳转服务器,网络上一定要互通;

2,  根据不同业务的系统划分列表信息;

3,  涉及到资产列表信息,服务器的安全性一定要高。

 

结果:之前申请了一台专门监控的服务器,用于提取周报信息。刚好能满足这个条件。

 

【针对性设计结构】

1,  显示信息的方式,根据业务系统不同显示信息;---根据比多的业务域分类

2,  登录服务器的方式选择,多个节点登录;---能选择性的多个节点登录,例如RAC

3,  使用哪个用户登录。---考虑到也有单机主机,决定用Oracle用户登录

 

经过对上面的问题考虑,决定用Oracle用户根据不同系统可多个节点选择登录。最终结果如下:

主要信息列表文件:

技术分享图片

主要功能输出信息:

技术分享图片

 

主要实现功能的部分脚本如下:

#!/bin/sh

######################################################################

# login3.sh

# This script is conn db hosts instance

# Author CZT

######################################################################

function connectdb()   》》》主要实现输出主机信息的函数

{

      title=`cat ${list_dest}|head -1`

      result=`cat ${list_dest}|grep -i ${Dbname}`

      echo  "+---------------+---------------+---------------+---------------+---------------+-----+"

      printf "|"

      printf "%-15s|" $title

      printf "\n"

      echo  "+---------------+---------------+---------------+---------------+---------------+-----+"

      printf "|"

      printf "%-15s|" $result

      printf "\n"

      echo "+---------------+---------------+---------------+---------------+---------------+-----+"       v_instancenum=4

      read -p "Enter host instancenum:" v_instance

      while [ ! $v_instance ]

      do

      read -p "Enter host instancenum:" v_instance

      done

      if [[ $v_instance =~ "^[1-2]*$" ]]

      then

      v_instancenum=$[$v_instancenum+$v_instance]

      dbip=`cat ${list_dest}|grep -i ${Dbname}|awk ‘{print $"‘$v_instancenum‘"}‘`

      echo "Note:You are current try to connect "$Dbname$v_instance

      ssh  $dbip

      else

      echo "Note:You are current try to connect "$Dbname$v_instance" does not exist,Please enter the right instancenum!!!"

      fi

}

 

list_dest=‘/home/oracle/tmp/liebiao.txt‘ 》》》创建不同业务域系统的列表数组

LISTS="$(cat /home/oracle/tmp/xitong.txt) QUIT" 》》》创建不同系统的列表数组

echo "+-------------------------------+This is the system list+---------------------------------------+"

select Dest in $LISTS;do  》》》创建不同业务域系统的列表数组

case $Dest in

"CRM")  》》》CRM业务域系统选项信息

     DB="$(cat /home/oracle/tmp/CRMDB.TXT) QUIT"

     echo "+--------------------------------+This is the $Dest db list+-------------------------------+"

     select Dbname in $DB;do

     case $Dbname in

      "YYDB")  》》》营业数据库系统信息

     connectdb $Dbname; 》》》调用第一步涉及的connectdb函数输出信息

           ;;

     "GGDB")

     connectdb $Dbname;

           ;;

     "DZQD")

     connectdb $Dbname;

           ;;

     "QUIT")

     echo "Note:You are quit of the option!"

     break;

     ;;

     esac

     done;

     ;;

"QUIT") 》》》选择退出时,退出

    echo "Ignorant" 

    break;

    ;;

esac

done;

 

【问题思考】

1,  总体实现的思路逻辑是比较简单,但是功能确实比较实用,特别适用于不熟悉系统的同事,脚本同时也实现其他库,比如测试库,开发库进行扩展;

2, 对于网络这段时间出现的问题由于权限限制,无法解决,有些数据库还是需要手动登录;

3, 对于输出信息的显示也是非常重要,参考MySQL的输出信息格式,花了不少时间进行调整,用户体验也是非常重要的一个关注点;

4, 对于用户密码安全性问题,尽量使用加密的方法进行对密码加密。

 

【总结】:

1,  根据实际情况,根据需求一定要仔细罗列一下逻辑思路,必会事半功倍;

2,  涉及比较多的主机信息时,写些小程序对工作的效率也是非常有效提高的;

关于资产安全信息一定评估好,对于数据库而言数据安全是必不可少的重要环节。

 

相关文章