CMDB实现的四种方式
方式一 Agent方式
#本质就是在各个服务器上部署Agent脚本,执行subprocess.getoutput()命令,然后将每台机器上的执行结果,返回给API,通过数据的筛选,存入数据库
优点:速度快
缺点:需要每台服务器部署一个Agent
方式二、ssh类实现方式(基于Paramiko模块)
中控机通过Paramiko模块(py模块)登陆到各个服务器上,然后执行命令的方式取获取各个服务器上的信息,中控机把服务器的信息发送给API,对数据进行处理,存入数据库 #优点:不需要各个服务器部署Agent #缺点:需要登陆各个服务器,速度慢
pip install paramiko import paramiko #创建SSH对象 ssh = paramiko.SSHClient() #允许连接不在know_host文件中的主机 ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) #连接服务器 ssh.connect(hostname='10.0.0.100',port=22,username='root',password='1') stdin ,stdout ,stderr = ssh.exec_command('hostname') #执行命令 result = stdout.read() print(result) #关闭连接 ssh.close()
方式三 salt stack方式
使用第三方工具,在中控机上装salt-master,待采集信息的服务器装salt-minion,不需要登陆每台服务器,类似于两套生产者消费者模型,分别把数据存到队列中
salt-minion从队列中拿到命令,执行命令,把结果放到队列中,salt-master从队列中拿到结果,发送给API #优点:快,开发成本低, #缺点:依赖于第三方工具
1、安装与配置
master端 #1安装salt-master yum install salt-master #2修改配置文件 vim /etc/salt/master #3启动 service salt-master start #slave端 #1安装salt-minion yun install salt-minion #2修改配置文件 master:10.211.55.4 #master的地址 或 master: -10.211.55.4 -10.211.55.5 random_master:True id:c2.salt.con #客户端在salt-master中显示的唯一ID #3启动 service salt-minion start
2、授权
salt-key-L # 查看已授权和未授权的slave salt-key -a salve_id # 接受指定id的salve salt-key -r salve_id # 拒绝指定id的salve salt-key -d salve_id # 删除指定id的salve
3、执行命令
在master服务器上对salve进行远程操作
salt 'c2.salt.com' cmd.run 'ifconfig'
基于API的方式
import salt.client local = salt.client.LocalClient() result = local.cmd('c2.salt.com', 'cmd.run', ['ifconfig'])