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