加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

CMDB实现的四种方式

发布时间:2020-12-15 23:05:41 所属栏目:安全 来源:网络整理
导读:一, Agent(基于shell命令实现) Agent方式,可以将服务器上面的Agent程序作定时任务,定时将资产信息提交到指定API录入数据库 优点:速度快 缺点:需要为每台服务器部署一个Agent程序 二,Paramiko类(SSH形式,基于Paramiko) 中控机在获取未采集资产信息

一, Agent(基于shell命令实现)

Agent方式,可以将服务器上面的Agent程序作定时任务,定时将资产信息提交到指定API录入数据库

优点:速度快 缺点:需要为每台服务器部署一个Agent程序

二,Paramiko类(SSH形式,基于Paramiko)

中控机在获取未采集资产信息的服务器(服务器主机名,密码),依赖于Paramiko(py模块)通过SSH方式去获取

优点:无Agent? 缺点:速度慢

如果在服务器较少的情况下,可应用此方法

import paramiko

# 创建SSH对象
ssh = paramiko.SSHClient()

# 允许连接不在know_hosts文件中的主机
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())

# 连接服务器
ssh.connect(hostname="10.0.0.10",port=22,username="root",password="123")

# 执行命令
stdin,stdout,stderr = ssh.exec_command(‘df)

# 获取命令结果
result = stdout.read()

# 关闭连接
ssh.close()

?三, SaltStack

此方案本质上和第二种方案大致是差不多的流程,中控机在获取到未采集资产信息的服务器(主机名),再而将命令放入一个队列中,服务器来获取。服务器将结果放入另一个队列中,中控机获取将服务信息发送到API进而录入数据库。

基于SaltStack的master上的pillar以及远程执行命令实现

import salt.client
local = salt.client.LocalClient()
local.cmd("*","cmd.run",["whoami"])

优点: 快, 开发成本低, 缺点: 依赖第三方工具

?

四, Puppet(ruby开发)

基于Puppet的factor和report功能的实现

puppet中默认自带了5个report,放置在【/usr/lib/ruby/site_ruby/1.8/puppet/reports/】路径下。如果需要执行某个report,那么就在puppet的master的配置文件中做如下配置:
 
######################## on master ###################
/etc/puppet/puppet.conf
[main]
reports = store #默认
#report = true #默认
#pluginsync = true #默认
 
 
####################### on client #####################
 
/etc/puppet/puppet.conf
[main]
#report = true #默认
   
[agent]
runinterval = 10
server = master.puppet.com
certname = c1.puppet.com

  

1, 自定义facotr示例

在 /etc/puppet/modules 目录下创建如下文件结构:
 
modules
└── cmdb
    ├── lib
    │   └── puppet
    │       └── reports
    │           └── cmdb.rb
    └── manifests
        └── init.pp
 
################ cmdb.rb ################
# cmdb.rb
require puppet
require fileutils
require puppet/util
   
SEPARATOR = [Regexp.escape(File::SEPARATOR.to_s),Regexp.escape(File::ALT_SEPARATOR.to_s)].join
   
Puppet::Reports.register_report(:cmdb) do
  desc "Store server info
    These files collect quickly -- one every half hour -- so it is a good idea
    to perform some maintenance on them if you use this report (its the only
    default report)."
   
  def process
    certname = self.name
    now = Time.now.gmtime
    File.open("/tmp/cmdb.json",a) do |f|
      f.write(certname)
      f.write( | )
      f.write(now)
      f.write("rn")
    end
   
  end
end
 
 
################ 配置 ################
/etc/puppet/puppet.conf
[main]
reports = cmdb
#report = true #默认
#pluginsync = true #默认
View Code

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读