自動化運維-Python paramiko 實現無客戶端系統巡檢

Haoword_wang發表於2021-02-14

功能:批次系統命令巡檢

物件:作業系統 HP-UN  Linux

方法:Python paramiko

實現關鍵指令碼:

第一 登入系統資訊:

#建立使用者登陸資訊,並且生產一個JSON 檔案
    def write_os_info():
        path = os.path.dirname(__file__) + '/os_logon.json'
        os_info = {'主機名':{'ip':'具體IP', 'pro':'登入系統的協議', 'port':'透過上面協議的埠號', 'user':'登入系統的使用者', 'passwd':'登入系統的密碼'}}
        with open(path, "w+", encoding="utf-8") as wf:
            # dumps 將資料轉換成字串
            json.dump(os_info, wf)
        print("寫入檔案完成...")

說明:我採用了明文進行,資訊目錄,也可以透過下面方面,透過金鑰實現,感興趣的可以嘗試一下,有點事可以保護系統的使用者名稱和密碼;

#private_key = paramiko.RSAKey.from_private_key_file('id_rsa')

第二  讀取使用者登入資訊,透過上一步生產的JSON 檔案,進行逐個系統資訊讀取

# 讀取使用者登陸資訊
    def get_os_result():
        global g_tmp_ip
        global g_tmp_port
        global g_tmp_pro
        global g_tmp_user
        global g_tmp_passwd
        path = os.path.dirname(__file__) + '/os_logon.json'
        with open(path, "r+", encoding="utf-8") as rf:
            os_info = json.load(rf)
            #print(os_info)
        print("讀取檔案完成...")
        #print(os_info.items())
        for keyValue in (os_info.keys()):
            #print(os_info[keyValue])
            nextValue     =  os_info[keyValue]
            g_tmp_ip      = nextValue['ip'].strip()
            g_tmp_port    = int(nextValue['port'].strip())
            g_tmp_pro     = nextValue['pro'].strip()
            g_tmp_user    = nextValue['user'].strip()
            g_tmp_passwd  = nextValue['passwd'].strip()
            print("########HOSTNAME:",keyValue,",IP:",g_tmp_ip,",PROTOCOL:",g_tmp_pro,",LOGON USER:",g_tmp_user,"########")
            #透過獲取JSON 檔案中使用者登陸系統
            get_os_info.get_os_dir(g_tmp_ip,g_tmp_pro, g_tmp_port, g_tmp_user, g_tmp_passwd)
            time.sleep(3) #sleep 3 s 為了巡檢的內容慢慢的輸出

第三 獲取系統的目錄使用情況,首先透過系統型別分類,然後再進行不同系統的目錄巡檢:

#透過IP 協議 埠號  使用者名稱 密碼 登陸系統
    def get_os_dir(ip,pro,port,user,passwd):
        if pro == 'SSH':
            # 建立SSH物件
            ssh = paramiko.SSHClient()
            # 允許連線不在know_hosts檔案中的主機
            ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
            # 連線伺服器
            ssh.connect(ip, port, user, passwd)
            #ssh.connect(hostname='', port=22, username='oracle', password='')
            stdin, stdout, stderr = ssh.exec_command('/bin/uname')
            result = stdout.read()
            platformV = result.decode().strip()
            plat_name = 'Linux'
            #print(platformV)
            if platformV == plat_name:
                # 執行命令
                stdin, stdout1, stderr = ssh.exec_command('df -h')
                result1 = stdout1.read()
                print(result1.decode())
                # 獲取命令結果
            elif platformV == "HP-UX":
                # 執行命令
                stdin, stdout2, stderr = ssh.exec_command('bdf')
                result2 = stdout2.read()
                print(result2.decode())
                # 獲取命令結果
            else:
                print('對不起,該系統我們當前不支援')
            # 關閉連線
            ssh.close()
        elif pro == 'TELNET':
            print('hh')
        else:
            print('error')




第四 效果:

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/26342786/viewspace-2757257/,如需轉載,請註明出處,否則將追究法律責任。

相關文章