Linux下SNMP 一键安装Shell脚本

Net-SNMP是一个免费的、开放源码的SNMP实现,以前称为UCD-SNMP。SNMP 很多都用安装后,作为监控宝和阿里云的系统信息监控用。下面分享linux下SNMP 一键安装shell脚本:
#!/usr/bin/env bash

  export LC_ALL=C

  if [ "$(id -u)" != "0" ]
  then
    echo "This script. must be run as root" 1>&2
    exit 1
  fi
 
####check if gcc perl perl-devel(centos) or libperl-dev(ubuntu) exists,   
   APT_CMD=`whereis apt-get|awk '{print $2}'`
   YUM_CMD=`whereis yum|awk '{print $2}'`
   if [ "$APT_CMD"x != ""x ]
   then
       echo "$APT_CMD"
       cmd=`dpkg -l|grep gcc`
       if [ "$cmd"x = ""x ]
       then
           apt-get install -y gcc 
       fi
       cmd=`dpkg -l|grep perl`
       if [ "$cmd"x = ""x ]
       then
           apt-get install -y perl 
       fi
       cmd=`dpkg -l|grep "libperl-dev"`
       if [ "$cmd"x = ""x ]
       then
           apt-get install -y  libperl-dev 
       fi
   elif [ "$YUM_CMD"x != ""x ]
   then
      echo $YUM_CMD
      cmd=`rpm -q gcc|grep -v "not installed"`
      if [ "$cmd"x = ""x ]
      then
          yum install gcc -y 1>/dev/null 2>&1
      fi
      cmd=`rpm -q perl|grep -v "not installed"`
      if [ "$cmd"x = ""x ]
      then
          yum install -y perl 1>/dev/null 2>&1
      fi
      cmd=`rpm -q perl-devel|grep -v "not installed"`
      if [ "$cmd"x = ""x ]
      then
          yum install -y perl-devel 1>/devel/null 2>&1
      fi
   else
      echo "your release have no yum or apt-get"
   fi
   
  function Usage()
  {
       echo "用法如下:(注意:2c版本密码必须大于6位,3版本密码必须大于8位)";
       echo ""
       echo "    $0 -v 版本号(2代表2C,3代表版本3) -u 用户名 -p 密码";
       echo "    $0 -v [2|3] -u username -p password";
       echo "";
       exit 0;
  }
  
  if [ $# -lt 1 ]
  then
      echo "请输入参数"
      Usage
  fi
  
#####get parameters
   version=0
   username=""
   password=""
   while getopts ":v:u:p:"  opt;
   do
       case $opt in
       v)
            version=$OPTARG
            if [[ ${OPTARG:0:1} = "-" ]]
            then
                echo ""
                echo "-v need argument"
                echo ""
                Usage
            fi
       ;;
       u)
            username=$OPTARG
            if [[ ${OPTARG:0:1} = "-" ]]
            then
                echo ""
                echo "-u need argument"
                echo ""
                Usage
            fi
       ;;
       p)
            password=$OPTARG
            if [[ ${OPTARG:0:1} = "-" ]]
            then
                echo ""
                echo "-p need argument"
                echo ""
                Usage
            fi
       ;;
       :)
            Usage
       ;;
       ?) 
            paralist=-1;
            Usage
       ;;
       esac
   done   

###check version number, must be 2 or 3
  if [ $version -ne "3" -a $version -ne "2" ]
  then
    Usage
    exit 3
  fi
  
  if [ $version -eq "3" -a  "$username"x = ""x ]
  then
     echo "版本3必须要输入用户名"
     Usage
  fi

###check password length, version 3 big then 8, version 2 big then 6
  if [ "$version" -eq "3" ] 
  then
      if [ ${#password} -lt "8" ]
      then
          echo ""
          echo "Your passwords must greater than 8 bytes" 1>&2
          echo ""
          Usage
      fi
  else          ########### version = 2
      if [ ${#password} -lt "6" ]
      then
          echo ""
          echo "Your passwords must greater than 6 bytes" 1>&2
          echo ""
          Usage
      fi
  fi


   wget http://download.cloud.360.cn/yjk/net-snmp.tar.gz

   tar zxvf net-snmp.tar.gz

   cd net-snmp-5.7.2
   ./configure --prefix=/usr/local/snmp --with-mib-modules=ucd-snmp/diskio 
-enable-mfd-rewrites --with-default-snmp-version="$version"  --with-sys-contact="@@no.where" 
--with-sys-location="Unknown" --with-logfile="/var/log/snmpd.log" 
--with-persistent-directory="/var/net-snmp"
   make
   make install

   case $version in
     2)
     cat >> /usr/local/snmp/share/snmp/snmpd.conf << EOF
rocommunity $password 101.199.100.150
rocommunity $password 220.181.150.98
rocommunity $password 180.153.229.230
rocommunity $password 220.181.150.125
rocommunity $password 103.28.10.223

EOF
     ;;
     3)
     cat >> /usr/local/snmp/share/snmp/snmpd.conf << EOF
rouser $username auth
EOF
     
#     echo "createUser $2 MD5 $3" >>/var/net-snmp/snmpd.conf
#     cat >> /var/net-snmp/snmpd.conf << EOF
#createUser $2 MD5 $3
#EOF
     ;;
     *)
     echo "Please check your input version" 1>&2
     echo
     exit 1
     ;;
   esac

  i=0
  while [ $i -lt 5 ]
  do
      ret=`/usr/local/snmp/sbin/snmpd`
      ret=`ps aux | grep -v grep | grep snmp`
      if [ "$ret"x = ""x ]
      then
          ((i=i+1))
          ret=`/usr/local/snmp/sbin/snmpd`
      else
          break
      fi
  done
  
  case $version in
  3)
      echo "createUser $username MD5 $password" >>/var/net-snmp/snmpd.conf
  ;;
  esac
  
  pid=`ps -ef|grep snmpd|grep -v grep|awk '{print $2}'`
  echo "pid: $pid"
  if [ "$pid"x != ""x ]
  then 
      kill -9 $pid
      /usr/local/snmp/sbin/snmpd
  else
      /usr/local/snmp/sbin/snmpd
  fi     
  
  case $version in
  3)
      cmd=`cat /var/net-snmp/snmpd.conf|grep "$username"`
      if [ "$cmd"x == ""x ]
      then
          pid=`ps -ef|grep snmpd|grep -v grep|awk '{print $2}'`
          if [ "$pid"x != ""x ]
          then
              kill -9 $pid
              echo "createUser $username MD5 $password" >>/var/net-snmp/snmpd.conf
          fi
      fi
  ;;
  esac
 
  ret=`ps -ef | grep -v grep | grep snmp`
  if [ "$ret"x != ""x ]
  then
    echo "snmp start success"
    echo
  else
    echo "snmp start failed"
    echo
    exit 4
  fi

  echo "Finish..."
  echo
  exit 0

关键词: linux , shell脚本

上一篇: 使用puttygen生成SSH密钥实现Putty免密码登录
下一篇: 给Linux监控软件Monitorix 3.5添加登录认证密钥

目前还没有人评论,您发表点看法?
发表评论

评论内容 (必填):