Python 利用pexpect和paramiko模块进行远程服务器的监控

简介:

一 模块的安装

   安装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.py
import pexpect
def 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 ret

sshCmd('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.py
import datetime
import threading
import paramiko

def 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)
目录
相关文章
|
15天前
|
测试技术 Python
手动解决Python模块和包依赖冲突的具体步骤是什么?
需要注意的是,手动解决依赖冲突可能需要一定的时间和经验,并且需要谨慎操作,避免引入新的问题。在实际操作中,还可以结合使用其他方法,如虚拟环境等,来更好地管理和解决依赖冲突😉。
|
1月前
|
缓存 监控 Linux
Python 实时获取Linux服务器信息
Python 实时获取Linux服务器信息
|
26天前
|
Python
在Python中,可以使用内置的`re`模块来处理正则表达式
在Python中,可以使用内置的`re`模块来处理正则表达式
41 5
|
1月前
|
Java 程序员 开发者
Python的gc模块
Python的gc模块
|
1月前
|
数据采集 Web App开发 JavaScript
python-selenium模块详解!!!
Selenium 是一个强大的自动化测试工具,支持 Python 调用浏览器进行网页抓取。本文介绍了 Selenium 的安装、基本使用、元素定位、高级操作等内容。主要内容包括:发送请求、加载网页、元素定位、处理 Cookie、无头浏览器设置、页面等待、窗口和 iframe 切换等。通过示例代码帮助读者快速掌握 Selenium 的核心功能。
118 5
|
2月前
|
Python
SciPy 教程 之 SciPy 模块列表 6
SciPy教程之常量模块介绍:涵盖公制、二进制(字节)、质量、角度、时间、长度、压强、体积、速度、温度、能量、功率及力学单位。示例展示了角度单位转换为弧度的几个常用常量。
21 7
|
2月前
|
Python
SciPy 教程 之 SciPy 模块列表 7
`scipy.constants` 模块提供了常用的时间单位转换为秒数的功能。例如,`constants.hour` 返回 3600.0 秒,表示一小时的秒数。其他常用时间单位包括分钟、天、周、年和儒略年。
19 6
|
1月前
|
Python
SciPy 教程 之 SciPy 模块列表 13
SciPy教程之SciPy模块列表13:单位类型。常量模块包含多种单位,如公制、二进制(字节)、质量、角度、时间、长度、压强、体积、速度、温度、能量、功率和力学单位。示例代码展示了如何使用`constants`模块获取零摄氏度对应的开尔文值(273.15)和华氏度与摄氏度的转换系数(0.5556)。
18 1
|
1月前
|
XML 前端开发 数据格式
超级详细的python中bs4模块详解
Beautiful Soup 是一个用于从网页中抓取数据的 Python 库,提供了简单易用的函数来处理导航、搜索和修改分析树。支持多种解析器,如 Python 标准库中的 HTML 解析器和更强大的 lxml 解析器。通过简单的代码即可实现复杂的数据抓取任务。本文介绍了 Beautiful Soup 的安装、基本使用、对象类型、文档树遍历和搜索方法,以及 CSS 选择器的使用。
95 1
|
2月前
|
Python
SciPy 教程 之 SciPy 模块列表 9
SciPy教程之常量模块介绍,涵盖多种单位类型,如公制、质量、角度、时间、长度、压强等。示例展示了如何使用`scipy.constants`模块查询不同压强单位对应的帕斯卡值,包括atm、bar、torr、mmHg和psi。
16 1