记服务器集群snmp代理搭建

实验室小萌新,今天美美APEX之后接到任务,要给20多个服务器装snmp代理,几经脱发,最后也算是高效完成了任务,在这里记录一下过程。

先贴上参考的大佬文章:

snmp协议配置_snmp配置-CSDN博客

snmpd.conf 配置详解-CSDN博客

linux snmpd服务_com2sec notconfiguser default public-CSDN博客

https://blog.51cto.com/865516915/1880336

https://www.cnblogs.com/oloroso/p/4844907.html

简单网络组管理协议SNMP介绍

SNMP(Simple Network Management Protocol)是一种网络管理协议,用于管理和监控网络设备、操作系统和应用程序。它提供了一组用于检索和修改网络设备配置、监视设备状态和性能的标准化方法。

SNMP 是一个客户端-服务器协议,由两个主要组件组成:管理站点(管理者)和代理代理(被管理者)。

管理站点:通常是一个网络管理员或系统管理员使用的工具或应用程序,用于监控和管理网络中的设备。管理站点发送 SNMP 请求到代理代理,并接收和处理代理代理返回的响应。
代理代理:指网络中的设备或主机,它们通过 SNMP 协议提供对自身的管理和监控功能。代理代理接收来自管理站点的 SNMP 请求,并根据请求执行相应的操作,然后将结果返回给管理站点。

需求分析

师兄已经给出了SNMP管理站点的ip,因此我只需要配置代理即可。配置的最终要求主要有这些:

  1. 创建专门用来维护snmp协议的账户,这个账户不能有root权限,但是需要可以用systemctl来启动/重启/关闭 snmpd服务,以及对配置文件进行修改
  2. 配置snmpd的配置文件,使得管理站点对代理仅有读权限而不能有写权限,同时指定访问来源,即只有那一个管理站点可以管理我们这些snmp代理

安装snmp服务

yum一句话的事,文件也很小,我就不多bb了

yum install net-snmp net-snmp-libs net-snmp-utils

创建账户

创建账户自然采用adduser命令。创建一个没有root权限的用户,只需要定义一个不能root的用户组,然后把用户塞进去就可以了。

# 创建用户snmp
useradd -m -s /bin/bash snmp

# 创建用户组snmp(如果没有的话)
groupadd snmp

# 将用户snmp添加到snmp组
usermod -aG snmp snmp

在创建账户之后,记得使用passwd命令设置snmp的密码,否则是无法登录的

#设置snmp账户的密码
passwd snmp

配置账户权限

如何实现“账户不能有root权限,但是需要可以用systemctl来启动/重启/关闭 snmpd服务,以及对配置文件进行修改”呢?我这里采用了chatgpt给出的polkit方案

什么是polkit

Polkit是一个Linux权限管理框架,用于简化用户与系统服务之间的交互,尤其是在没有root权限的情况下。Polkit允许普通用户执行某些需要root权限的任务,而无需输入root密码。

配置过程

新建 /etc/polkit-1/localauthority/50-local.d/snmpd.pkla ,配置指定的snmp用户组能够实现的操作(使用systemctl控制snmpd服务)

[Allow snmp to manage snmpd]
Identity=unix-user:snmp
Action=org.freedesktop.systemd1.manage-units
Object=snmpd.service
ResultAny=yes
ResultInactive=yes
ResultActive=yes

[Allow snmp to start snmpd service]
Identity=unix-user:snmp
Action=org.freedesktop.systemd1.start-unit
Object=snmpd.service
ResultAny=yes
ResultInactive=yes
ResultActive=yes

[Allow snmp to stop snmpd service]
Identity=unix-user:snmp
Action=org.freedesktop.systemd1.stop-unit
Object=snmpd.service
ResultAny=yes
ResultInactive=yes
ResultActive=yes

随后,重启polkit

systemctl restart polkit

另外,snmp的操作用户需要可以对/etc/snmp/snmpd.conf进行读写。因此对这个文件的权限进行一些修改:

# 更改snmpd服务的所有权和权限
chown snmp:snmp /etc/snmp/snmpd.conf
chmod 640 /etc/snmp/snmpd.conf

配置snmpd.conf

关于snmpd的所有配置基本都在snmpd.conf中。这个文件的结构也是比较简单的

net-snmp的配置文件是有一定的层次结构的,配置起来也很方便。网上找了很多资料,大概把这个配置文件的各个信息搞懂了一点。其实在net-snmp的EXAMPLE.conf文件中对齐有详细的描述,不过是英文的。

定义共同体

使用 rocommunity 来定义一个只读权限的共同体,使用 rwcommunity 来定义一个读写权限的共同体。我这里因为要让管理端只读,因此都使用rocommunity来定义共同体了

rocommunity    共同体名

定义安全体

定义完共同体之后就要定义一个安全体,并把共同体映射到一个安全体中去。安全体用于控制外部访问的来源的。

使用com2sec关键字来定义安全体

#            sec.name        souce                 community
com2sec      安全体名         IP/MASK                共同体名

由于是指定的管理端,我这里直接把管理端IP写进source。后面跟个子网掩码,就是255.255.255.255,表示只有这一个ip可以访问这个snmp代理

定义安全组

定义完安全体之后,就要定义安全组了。安全体是用于控制访问的的来源的,安全组就是控制安全体中允许的来源的访问授权模式的。

#            groupName         securityModel         securityName
group        readgroup            usm                    read
group        writegroup            usm                    write
group        testgroup            usm                    test

定义视图,供安全组使用

定义完安全组后,需要定义一个视图。视图就是这个安全体的可见范围。

对于每一个安全体,需要向其授权一些视图,视图确定了可以访问那些节点

#第三步,定义视图,供安全组使用
#view.name  视图名
#incl/excl  对下面的MIB子树是包括还是排除(included/excluded)
#subtree    视图中所涉及的mib子树
#mask(optional)  掩码
#        view.name    incl/excl       subtree                    [mask]
view    all            included        .1      
view    test        included        system      
view    test        included        system.sysLocation      
#view    if2            included        .1.3.6.1.2.1.2.2.1.0.2   FFA0

向安全组授权相应的视图

#第四步,向安全组授权相应的视图
# group 安全组名
# context 上下文v1,v2中始终为空
# sec.model 安全模型,可选值:v1,v2,usm
# sec.level 安全级别  可选值:auth,noauth,priv,      v1,v2c中只能为noauth
# prefix 前缀。指定context如何与PDU中的context匹配,V3使用
# read   授权的读视图
# write  授权的写视图
# notif  授权的trap视图

#       group    context        sec.model    sec.level    prefix    read   write   notif
access  readgroup    ""            any        noauth        exact     all    none    none
access  writegroup    ""            any        noauth        exact     all    none    none
access  testgroup    ""            any        noauth        exact     all    none    none
#acess  readgroup "interface2"    usm        priv        exact     if2    if2        if2  
# 4. access
# 命令格式:access groupName context model level prefx read write notify
# 功能:设置访问某一个view的存取权限
# 参数说明:    groupName:控制存取权限的组名
#             context:v1和v2c版本,context必须设置为""
#             model:v1、v2c、usm、tsm、ksm
#             最后3中是v3版本的授权模式,usm(User-Based Security Model)是默认授权模式,tsm用于SSH or DTLS,ksm用于支持Kerberos
#             level:可以去3种值:noauth、auth、priv
#             noauth:允许无权限访问(v1,v2c使用)
#             auth:必须有权限才能访问
#             priv:强制加密访问
#             prefx:exact or prefix
#             read、write、notify:指明某一个view的权限是否可以GET*, SET*、
#             TRAP/INFORM,如果该view不能read,则置none

其实后面三步我就没动脑子了,在安装好snmpd之后,软件自动会有后续的配置,把一些注释取消掉之后就可以了

贴一下我最终配置好的样子:

随后,使用systemctl重启这个服务,应用配置

systemctl restart snmpd

加快速度

在搞完了上面这一堆操作之后,终于配置好了一台服务器。时间过去了一个多小时,配好剩下二十多台还需要......

还好这些服务器都在一个网段里,我们的操作服务器可以ssh它们。为了加快咱的速度,我采取了一些简单的办法

在所有服务器中,snmpd.conf都是一样的,我把一开始那台先输出到一个txt里

cat /etc/snmp/snmpd.conf >> test.txt

然后创建一个脚本,自动化上面的配置用户的所有步骤:

#!/bin/bash
######manage.sh

# 创建用户snmp
useradd -m -s /bin/bash snmp

# 将用户snmp添加到snmp组
usermod -aG snmp snmp

# 创建polkit规则,允许snmp用户管理snmpd服务
cat <<EOF > /etc/polkit-1/localauthority/50-local.d/snmpd.pkla
[Allow snmp to manage snmpd]
Identity=unix-user:snmp
Action=org.freedesktop.systemd1.manage-units
Object=snmpd.service
ResultAny=yes
ResultInactive=yes
ResultActive=yes

[Allow snmp to start snmpd service]
Identity=unix-user:snmp
Action=org.freedesktop.systemd1.start-unit
Object=snmpd.service
ResultAny=yes
ResultInactive=yes
ResultActive=yes

[Allow snmp to stop snmpd service]
Identity=unix-user:snmp
Action=org.freedesktop.systemd1.stop-unit
Object=snmpd.service
ResultAny=yes
ResultInactive=yes
ResultActive=yes
EOF

# 重新加载polkit规则
systemctl restart polkit

# 更改snmpd服务的所有权和权限
chown snmp:snmp /etc/snmp/snmpd.conf
chmod 640 /etc/snmp/snmpd.conf

# 读取test.txt文件的内容
cat /path/to/test.txt > /etc/snmp/snmpd.conf

# 重新加载systemd以应用新的权限
systemctl daemon-reload

# 重启snmpd服务
systemctl restart snmpd

echo "用户snmp已创建,并配置了管理snmpd服务的权限。test.txt内容已写入snmpd.conf。"

可以看到,这个脚本自动把txt的内容复制到snmpd.conf里了

然后就是用scp命令,全部copy到别的服务器里面去

scp test.txt manage.sh root@xx.xx.xx.xx:/root/

这一步也可以写个脚本自动化,但是要一个一个输密码,我没有采用这个方案。脚本倒是写好了,如果你的服务器配好了ssh key不需要输入密码的话,可以参考这个脚本

#!/bin/bash

# 指定源文件和目标文件
SOURCE_FILE=test.txt
TARGET_FILE=manage.sh

# 指定端口范围
START_IP=xx.xx.xx.xx
END_IP=xx.xx.xx.xx

# 循环遍历IP地址范围
for IP in $(seq$START_IP $END_IP); do
    # 使用ssh端口转发功能构建scp命令
    scp $SOURCE_FILE$TARGET_FILE root@localhost:$IP:/root/
    scp $SOURCE_FILE$TARGET_FILE root@localhost:$IP:/root/
done

这样就有了一个简单的流程:在复制文件到所有服务器后,ssh到新服务器,跑manage.sh脚本,给snmp账号设密码,完事了。

最后干完这20多台服务器就花了十五分钟,当然准备脚本还是花了一些时间的。

牢骚

天将降大任于斯人也,必先苦其心志,劳其体肤,空乏其身。具体而言,就是干运维。

我不干总有人要干,我干了还能让我少玩垃圾apex,保护视力和血压。

有道是:

运维辛劳苦心智,心志坚韧耐磨磋。 科研视保身康健,少A一天是一天

  • 20
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Hadoop服务器集群搭建旨在实现分布式存储和计算,以满足大数据处理的需求。以下是Hadoop服务器集群搭建的主要目的: 1. 大数据存储:Hadoop提供了分布式文件系统HDFS,它能够将大规模数据分散存储在集群中的多个节点上。通过搭建Hadoop集群,可以获得高容量和可靠的存储系统,能够处理大量数据的存储需求。 2. 数据处理:Hadoop通过MapReduce框架,将数据分成小块进行并行计算,并在集群中的多个节点上同时执行计算任务。通过搭建Hadoop集群,可以实现高性能的并行计算,加快大数据处理的速度。 3. 高可用性:Hadoop集群支持故障转移和冗余备份,可以确保在节点故障时不丢失数据和服务中断。通过搭建Hadoop集群并配置高可用性特性,可以提高系统的可靠性和稳定性。 4. 水平扩展:Hadoop集群可以方便地进行水平扩展,即通过添加更多的节点来增加集群的处理能力和存储容量。通过搭建Hadoop集群,可以应对不断增长的数据量和计算需求,实现系统的可扩展性。 5. 数据共享和协作:Hadoop集群中的数据可以被多个用户和应用程序共享和访问。通过搭建Hadoop集群,可以提供一个统一的数据平台,方便不同团队或部门之间的数据共享和协作。 总而言之,Hadoop服务器集群搭建旨在提供一个高可用、可扩展和高性能的大数据处理平台,能够存储和处理海量数据,并支持并行计算和分布式存储,以满足大数据应用的需求。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值