python---CMDB配置管理数据库
零:项目目的
是一个运维自动化管理项目:
为了减少人工干预,降低人员成本 ---资产管理 --操作管理
避免人员直接操作服务器,使用后台去统一操作

一:实现方式
(一)Agent基于shell命令实现(在服务器去上安装Agent,在服务器本机定时自动去获取信息,发送到数据库,然后后台获取数据进行处理)
注意:一般我们不会直接将数据直接传递到数据库,会将数据传递到API接口先进行处理,过滤,然后才会发送到数据库。

注意:数据是由服务器agent主动发送至API
实现方案:
本地执行cmd命令。
方法一:os.system("命令") 不可以返回数据
方法二:subprocess模块,使用进程执行命令,可以获取到数据Popen("命令"),进程.stdout.read()<py2>或者直接getoutput("命令")<py3>

def agent(self,cmd):
import subprocess
try:
ret = subprocess.getoutput(cmd)
except AttributeError:
sub = subprocess.Popen(args=cmd,shell=True,stdout=subprocess.PIPE)
sub.wait()
ret = sub.stdout.read()
return retpython实现agent优点:信息采集快,由服务器自己采集信息传递到API
缺点:每台服务器都必须安装Agent
(二)SSH方法:使用paramiko模块,通过中控机服务器统一去获取指定服务器的信息。
paramiko模块了解



def ssh(self,cmd):
import paramiko
#.创建SSH对象
ssh = paramiko.SSHClient()
#.加上这句话不用担心选yes的问题,会自动选上
#.用ssh连接远程主机时,第一次连接时会提示是否继续进行远程连接,选择yes
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect(hostname="远程主机名",port="远程端口",username="用户名",password="密码")
#执行命令,获取结果到标准输入\出\错误流中
stdin,stdout,stderr = ssh.exec_command(cmd)
#.获取命令结果
result = stdout.read()
#.关闭连接
ssh.close()paramiko实现远程命令执行(方法一:使用用户名,密码)

def ssh(self,cmd):
import paramiko
#.创建SSH对象
ssh = paramiko.SSHClient()
#.加上这句话不用担心选yes的问题,会自动选上
#用ssh连接远程主机时,第一次连接时会提示是否继续进行远程连接,选择yes
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
#.获取私钥
private_key = paramiko.RSAKey.from_private_key_file("文件:其中保存了私钥,用于解密")
#.通过私钥去连接远程服务器(前提是自己的公钥已经在对方的authorized_keys文件中,paramiko已实现)
ssh.connect(hostname="远程主机名",port="远程端口",username="用户名",pkey="私钥private_key")
#.执行命令,获取结果到标准输入\出\错误流中
stdin,stdout,stderr = ssh.exec_command(cmd)
#.获取命令结果
result = stdout.read()
#.关闭连接
ssh.close()
return resultparamiko使用私钥去登录远程服务器执行命令优点:不需要为服务器安装agent等软件
缺点:速度慢
相关推荐
leonranri 2020-07-26
tshangshi 2020-03-04
onepiecedn 2019-11-09
UFO0 2007-12-12
GoatSucker 2019-10-30
Jiajinjin 2010-11-06
wushaojun 2019-08-17
caifengguo 2015-06-01
sleep技术讨论区 2019-06-27
职业炮灰 2011-09-13
zhangbdaxia 2011-01-29
西瓜皮儿的皮儿 2010-03-13
petterlu 2008-07-31
csdnstudylp 2012-08-10
CodingNotes 2018-08-10
wumingxiaozei 2017-10-25
MaQing 2018-08-30
wubude 2014-11-13
togeth 2012-02-06