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)
目录
相关文章
|
19天前
|
安全 Java 数据处理
Python网络编程基础(Socket编程)多线程/多进程服务器编程
【4月更文挑战第11天】在网络编程中,随着客户端数量的增加,服务器的处理能力成为了一个重要的考量因素。为了处理多个客户端的并发请求,我们通常需要采用多线程或多进程的方式。在本章中,我们将探讨多线程/多进程服务器编程的概念,并通过一个多线程服务器的示例来演示其实现。
|
4天前
|
人工智能 安全 Java
Python 多线程编程实战:threading 模块的最佳实践
Python 多线程编程实战:threading 模块的最佳实践
119 5
|
4天前
|
人工智能 数据库 开发者
Python中的atexit模块:优雅地处理程序退出
Python中的atexit模块:优雅地处理程序退出
8 3
|
7天前
|
Linux 网络安全 开发工具
【超详细!超多图!】【代码管理】Python微信公众号开发(3)- 服务器代码上传Github
【超详细!超多图!】【代码管理】Python微信公众号开发(3)- 服务器代码上传Github
13 0
|
7天前
|
存储 开发者 Python
Python中的argparse模块:命令行参数解析的利器
Python中的argparse模块:命令行参数解析的利器
16 2
|
7天前
|
开发者 Python
Python的os模块详解
Python的os模块详解
15 0
|
10天前
|
数据挖掘 API 数据安全/隐私保护
python请求模块requests如何添加代理ip
python请求模块requests如何添加代理ip
|
12天前
|
测试技术 Python
Python 有趣的模块之pynupt——通过pynput控制鼠标和键盘
Python 有趣的模块之pynupt——通过pynput控制鼠标和键盘
|
12天前
|
Serverless 开发者 Python
《Python 简易速速上手小册》第3章:Python 的函数和模块(2024 最新版)
《Python 简易速速上手小册》第3章:Python 的函数和模块(2024 最新版)
40 1
|
13天前
|
开发者 Python
Python中的并发编程:使用asyncio模块实现异步任务
传统的Python编程中,使用多线程或多进程进行并发操作时,常常会面临性能瓶颈和资源竞争的问题。而随着Python 3.5版本的引入,asyncio模块为开发者提供了一种基于协程的异步编程方式。本文将介绍如何使用asyncio模块实现异步任务,提高Python程序的并发处理能力。