博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Python 利用pexpect和paramiko模块进行远程服务器的监控
阅读量:5877 次
发布时间:2019-06-19

本文共 3362 字,大约阅读时间需要 11 分钟。

一 模块的安装

   安装pexpect模块

        pip install pexpect

    安装paramiko模块

        yum install python-devel

        pip install paramiko

        注意:如果不安装python-devel,则会报

        error: command ‘gcc’ failed with exit status 1;这是因为缺少python-dev的软件包

二 代码示例    

       pexpect代码示例     

#!/usr/bin/python# encoding=utf-8# Filename: pexpect_test.pyimport pexpectdef sshCmd(ip, passwd, cmd):    ret = -1    ssh = pexpect.spawn('ssh root@%s "%s"' % (ip, cmd))    try:        i = ssh.expect(['password:', 'continue connecting(yes/no)?'], timeout=5)        if i == 0:            ssh.sendline(passwd)        elif i == 1:            ssh.sendline('yes\n')            ssh.expect('password:')            ssh.sendline(passwd)        ssh.sendline(cmd)        r = ssh.read()        print r        ret = 0    except pexpect.EOF:        print "EOF"        ret = -1    except pexpect.TIMEOUT:        print "TIMEOUT"        ret = -2    finally:        ssh.close()    return retsshCmd('xxx.xxx.xxx.xxx','xxxxxx','ls /root')
paramiko代码示例

注意:必须要增加client.load_system_host_keys()此句,否则报如下错误:

unbound method missing_host_key() must be called with AutoAddPolicy instance as first argument (got SSHClient instance instead)

#!/usr/bin/python# encoding=utf-8# Filename: paramiko_test.pyimport datetimeimport threadingimport paramikodef sshCmd(ip, username, passwd, cmds):    try:        client = paramiko.SSHClient()        client.load_system_host_keys()        client.set_missing_host_key_policy(paramiko.AutoAddPolicy)        client.connect(ip, 22, username, passwd, timeout=5)        for cmd in cmds:            stdin, stdout, stderr = client.exec_command(cmd)            lines = stdout.readlines()            # print out            for line in lines:                print line,        print '%s\t 运行完毕\r\n' % (ip)    except Exception, e:        print '%s\t 运行失败,失败原因\r\n%s' % (ip, e)    finally:        client.close()#上传文件       def uploadFile(ip,username,passwd):    try:        t=paramiko.Transport((ip,22))        t.connect(username=username,password=passwd)        sftp=paramiko.SFTPClient.from_transport(t)        remotepath='/root/main.py'        localpath='/home/data/javawork/pythontest/src/main.py'        sftp.put(localpath,remotepath)        print '上传文件成功'    except Exception, e:        print '%s\t 运行失败,失败原因\r\n%s' % (ip, e)    finally:        t.close()#下载文件 def downloadFile(ip,username,passwd):    try:        t=paramiko.Transport((ip,22))        t.connect(username=username,password=passwd)        sftp=paramiko.SFTPClient.from_transport(t)        remotepath='/root/storm-0.9.0.1.zip'        localpath='/home/data/javawork/pythontest/storm.zip'        sftp.get(remotepath,localpath)        print '下载文件成功'    except Exception, e:        print '%s\t 运行失败,失败原因\r\n%s' % (ip, e)    finally:        t.close()          if __name__ == '__main__':    # 需要执行的命令列表    cmds = ['ls /root', 'ifconfig']    # 需要进行远程监控的服务器列表    servers = ['xxx.xxx.xxx.xxx']         username = "root"    passwd = "xxxxxx"    threads = []    print "程序开始运行%s" % datetime.datetime.now()    # 每一台服务器创建一个线程处理    for server in servers:        th = threading.Thread(target=sshCmd, args=(server, username, passwd, cmds))        th.start()        threads.append(th)             # 等待线程运行完毕    for th in threads:        th.join()             print "程序结束运行%s" % datetime.datetime.now()        #测试文件的上传与下载    uploadFile(servers[0],username,passwd)    downloadFile(servers[0],username,passwd)

转载地址:http://cnuix.baihongyu.com/

你可能感兴趣的文章
golang常见的几种并发模型框架
查看>>
ios开发知识(四十一)
查看>>
CentOS 6.5 安装部署zabbix(Agent客户端篇)
查看>>
(转)服务器time_wait和close_wait处理
查看>>
第4章:介绍python对象类型/4.1 python的核心数据类型/4.5 元组以及文件操作
查看>>
决心书
查看>>
软件安装
查看>>
IP-guard文档加密系统软件典型应用
查看>>
网络工程师成长日记143-自知之明去哪了
查看>>
交换路由实现全网互通
查看>>
思科路由器密码破解
查看>>
Linux学习— /etc/fstab文件详解
查看>>
国家危废目录
查看>>
Redis二进制安装
查看>>
最好用的工兵铲—MaxCompute Studio,来了解下!
查看>>
MySQL数据库的备份与恢复
查看>>
CentOS 7 实现Nginx+Tomcat 负载均衡
查看>>
openstack 调试
查看>>
tcpdump抓包分析,快速完成接口调试
查看>>
语音转文字软件哪个好,这三款值得收藏
查看>>