1. 程式人生 > >python---CMDB配置管理數據庫

python---CMDB配置管理數據庫

paramik one 標準輸入 3D () 配置管理 try open 需要

零:項目目的

是一個運維自動化管理項目:

  為了減少人工幹預,降低人員成本
  ---資產管理
  --操作管理

避免人員直接操作服務器,使用後臺去統一操作

技術分享圖片

一:實現方式

(一)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 ret
python實現agent

優點:信息采集快,由服務器自己采集信息傳遞到API

缺點:每臺服務器都必須安裝Agent


(二)SSH方法:使用paramiko模塊,通過中控機服務器統一去獲取指定服務器的信息。

paramiko模塊了解

技術分享圖片

技術分享圖片
def ssh(self,cmd):
        import paramiko
        #1.創建SSH對象
        ssh = paramiko.SSHClient()
        #2.加上這句話不用擔心選yes的問題,會自動選上
        #
3.用ssh連接遠程主機時,第一次連接時會提示是否繼續進行遠程連接,選擇yes ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) ssh.connect(hostname="遠程主機名",port="遠程端口",username="用戶名",password="密碼") #執行命令,獲取結果到標準輸入\出\錯誤流中 stdin,stdout,stderr = ssh.exec_command(cmd) #4.獲取命令結果 result = stdout.read() #5.關閉連接 ssh.close()
paramiko實現遠程命令執行(方法一:使用用戶名,密碼) 技術分享圖片
    def ssh(self,cmd):
        import paramiko
        #1.創建SSH對象
        ssh = paramiko.SSHClient()
        #2.加上這句話不用擔心選yes的問題,會自動選上
        #用ssh連接遠程主機時,第一次連接時會提示是否繼續進行遠程連接,選擇yes
        ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
        #3.獲取私鑰
        private_key = paramiko.RSAKey.from_private_key_file("文件:其中保存了私鑰,用於解密")
        #4.通過私鑰去連接遠程服務器(前提是自己的公鑰已經在對方的authorized_keys文件中,paramiko已實現)
        ssh.connect(hostname="遠程主機名",port="遠程端口",username="用戶名",pkey="私鑰private_key")
        #5.執行命令,獲取結果到標準輸入\出\錯誤流中
        stdin,stdout,stderr = ssh.exec_command(cmd)
        #6.獲取命令結果
        result = stdout.read()
        #7.關閉連接
        ssh.close()
        return result
paramiko使用私鑰去登錄遠程服務器執行命令

優點:不需要為服務器安裝agent等軟件

缺點:速度慢

python---CMDB配置管理數據庫