Linux下实现SNMP一键安装的Shell脚本

 更新时间:2014年07月05日 15:43:08   投稿:shichen2014  
这篇文章主要介绍了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

相关文章

  • Xshell全局去除提示音图文方法详解

    Xshell全局去除提示音图文方法详解

    这篇文章主要为大家介绍了Xshell全局去除提示音图文方法详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-12-12
  • shell脚本免交互的实现

    shell脚本免交互的实现

    交互就是实现一个功能时,不需要连续从键盘输入信息,通过脚本或命令自动完成一些动作,本文主要介绍了shell脚本免交互的实现,具有一定的参考价值,感兴趣的可以了解一下
    2024-02-02
  • Linux命令之free命令使用详解

    Linux命令之free命令使用详解

    在Linux系统中,free命令用于显示系统内存的使用情况,它提供了系统内存总量、已使用内存、空闲内存以及其他与内存相关的统计信息,本文将给大家详细的介绍一下Linux free命令的使用方法,需要的朋友可以参考下
    2023-08-08
  • 通过短信发送LOG归类号码发送情况的shell脚本

    通过短信发送LOG归类号码发送情况的shell脚本

    通过短信发送LOG归类号码发送情况的shell脚本,有需要的朋友可以参考下
    2013-02-02
  • 几个常用的Linux操作系统监控脚本代码

    几个常用的Linux操作系统监控脚本代码

    本文介绍了几个常用的Linux监控脚本,可以实现主机网卡流量、系统状况、主机磁盘空间、CPU和内存的使用情况等方面的自动监控与报警。根据自己的需求写出的shell脚本更能满足需求,更能细化主机监控的全面性
    2013-07-07
  • Linux上的文件搜索命令实例详解

    Linux上的文件搜索命令实例详解

    这篇文章主要介绍了Linux上的文件搜索命令实例详解,需要的朋友可以参考下
    2017-10-10
  • 使用shell脚本采集系统cpu、内存、磁盘、网络等信息

    使用shell脚本采集系统cpu、内存、磁盘、网络等信息

    这篇文章主要介绍了使用shell脚本采集系统cpu、内存、磁盘、网络等信息,需要的朋友可以参考下
    2014-05-05
  • Shell脚本中非交互式修改密码的两种方法

    Shell脚本中非交互式修改密码的两种方法

    这篇文章主要介绍了Shell脚本中非交互式修改密码的两种方法,本文讲解了使用chpasswd和使用passwd和--stdin组合两种方法,需要的朋友可以参考下
    2015-02-02
  • Shell中特殊字符的用法总结大全

    Shell中特殊字符的用法总结大全

    这篇文章主要给大家总结了关于Shell中特殊字符的相关资料,文中包括分好、&、#、!、$、大于号、单双引号等等一系列特殊字符的用法,通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面来一起看看吧。
    2017-08-08
  • Linux中的host命令应用实例详解

    Linux中的host命令应用实例详解

    这篇文章主要介绍了Linux中的host命令应用举例的相关资料,需要的朋友可以参考下
    2017-07-07

最新评论