千家信息网

paramiko实现远程配置软件脚本

发表于:2025-02-01 作者:千家信息网编辑
千家信息网最后更新 2025年02月01日,这篇文章运用了实例代码展示paramiko实现远程配置软件脚本,代码非常详细,可供感兴趣的小伙伴们参考借鉴,希望对大家有所帮助。# -*- coding: utf-8 -*-import parami
千家信息网最后更新 2025年02月01日paramiko实现远程配置软件脚本

这篇文章运用了实例代码展示paramiko实现远程配置软件脚本,代码非常详细,可供感兴趣的小伙伴们参考借鉴,希望对大家有所帮助。

# -*- coding: utf-8 -*-import paramikoimport sys, osimport datetimeimport subprocessimport timeimport reimport hashlibreload(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    # 创建一个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        '''         在现有的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实现远程配置软件脚本就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。

0