python---CMDB配置管理數據庫
阿新 • • 發佈:2018-05-19
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() retpython實現agent= sub.stdout.read() return ret
優點:信息采集快,由服務器自己采集信息傳遞到API
缺點:每臺服務器都必須安裝Agent
(二)SSH方法:使用paramiko模塊,通過中控機服務器統一去獲取指定服務器的信息。
paramiko模塊了解
def ssh(self,cmd): import paramiko #1.創建SSH對象 ssh = paramiko.SSHClient() #2.加上這句話不用擔心選yes的問題,會自動選上 #paramiko實現遠程命令執行(方法一:使用用戶名,密碼)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()
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 resultparamiko使用私鑰去登錄遠程服務器執行命令
優點:不需要為服務器安裝agent等軟件
缺點:速度慢
python---CMDB配置管理數據庫