paramiko實現(xiàn)遠程配置軟件腳本

這篇文章運用了實例代碼展示paramiko實現(xiàn)遠程配置軟件腳本,代碼非常詳細,可供感興趣的小伙伴們參考借鑒,希望對大家有所幫助。

朔城網(wǎng)站制作公司哪家好,找成都創(chuàng)新互聯(lián)公司!從網(wǎng)頁設計、網(wǎng)站建設、微信開發(fā)、APP開發(fā)、響應式網(wǎng)站設計等網(wǎng)站項目制作,到程序開發(fā),運營維護。成都創(chuàng)新互聯(lián)公司成立與2013年到現(xiàn)在10年的時間,我們擁有了豐富的建站經(jīng)驗和運維經(jīng)驗,來保證我們的工作的順利進行。專注于網(wǎng)站建設就選成都創(chuàng)新互聯(lián)公司

# -*- coding: utf-8 -*-

import paramiko
import sys, os
import datetime
import subprocess
import time
import re
import hashlib

reload(sys)
sys.setdefaultencoding("utf-8")
os.environ["PATH"] = "/usr/local/jdk18/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin"
os.environ["LANG"] = "en_US.UTF-8"

ip_list = ["10.110.189.217","10.110.193.106"]


class pub_filebeat():

    def __init__(self):
        self.username = "redis"
        self.passwd = "123456"
        self.client_ssh = None
        self.sftpcliet = None
        self.port = 22
        self.chan = None
        self.result = None


    # 創(chuàng)建一個ssh 鏈接
    def create_ssh(self,ip):
        self.client_ssh = paramiko.SSHClient()
        self.client_ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
        self.client_ssh.connect(ip, self.port, self.username, self.passwd, timeout=5)
        self.chan = self.client_ssh.invoke_shell()
        self.flag=None
        ''' 
        在現(xiàn)有的ssh鏈接的基礎上獲取一個ftp鏈接
        方式一   :
        transport = self.client_ssh.get_transport()
        self.sftpcliet = paramiko.SFTPClient.from_transport(transport)
        
        方式二 :
        self.sftpcliet = self.client_ssh.open_sftp()
        '''
        #
        # transport = self.client_ssh.get_transport()
        # self.sftpcliet = paramiko.SFTPClient.from_transport(transport)
        self.sftpcliet = self.client_ssh.open_sftp()

    def execute(self,ip):
        try:
            self.sendcmd(" sudo su - ")
            if self.flag == 1:
                self.sendcmd("redis@yto369")
            self.sendcmd(" cd /home/redis ")
            self.sendcmd(" tar  -zxvf filebeat623.tar.gz ")
            self.sendcmd(" sed -i 's/hostip: 10.1.241.99/hostip: %s/g' filebeat623/filebeat.yml ; " % (ip))
            self.sendcmd(" nohup filebeat623/filebeat -e  -c filebeat623/filebeat.yml > info.log 2>&1 & ")
            print "%s filebeat 部署完成" % (ip)
        except Exception,e:
            print e.message


    def tranfile(self):
        try:
            self.sftpcliet.put("F:\dwchaoyue\ELK\/filebeat623.tar.gz", '/home/redis/filebeat623.tar.gz')
        except Exception,e:
            print e.message
            self.sftpcliet.close()


    def sendcmd(self,cmd):
        cmd = cmd + '\r'
        p = re.compile(r'\[root@.+\s.*\]')
        self.result = ""
        self.chan.send(cmd)
        while True:
            time.sleep(0.5)
            ret = self.chan.recv(65535).decode("utf-8")
            self.result = self.result + ret
            if  'password' in self.result.split(" "):
                self.flag = 1
                break
            if p.search(ret):
                break


    # 遍歷ip 列表
    def bianli(self,ip_list):
        for ip in ip_list:
            self.create_ssh(ip)
            if self.check_result() >= 1 :
                print "%s filebeat 已部署,無需重新部署" % (ip)
                continue
                pass
            self.tranfile()
            self.execute(ip)
            if self.check_result() < 1:
                print "%s filebeat 部署失敗 ,請重試" % (ip)
            self.client_ssh.close()
            self.sftpcliet.close()


    def check_result(self):
        std_in,std_out,std_err = self.client_ssh.exec_command("ps  -ef  | grep  -i filebeat | grep  -v  'grep' | wc  -l")
        return int(std_out.read())


if __name__ == "__main__":
    try:
        pb = pub_filebeat()
        pb.bianli(ip_list)
    except Exception, e:
        print e

關于paramiko實現(xiàn)遠程配置軟件腳本就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

文章題目:paramiko實現(xiàn)遠程配置軟件腳本
本文來源:http://bm7419.com/article0/goidio.html

成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供全網(wǎng)營銷推廣、小程序開發(fā)、ChatGPT、搜索引擎優(yōu)化、App開發(fā)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

小程序開發(fā)