#!/usr/bin/python

'''
Created on 2015-06-09
@author: Administrator
'''

import pexpect
import os,sys
from optparse import OptionParser
import logging,multiprocessing
import logging.handlers #menue
usage='%prog [-h][-s Servers][-c CMDS][--version]' parser=OptionParser(usage=usage,version='Hu 2.0_20150609')
parser.add_option('-s','--Server',dest='server',default='ip.txt',help='The Server Info')
parser.add_option('-c','--CMDS',dest='cmd',default='pwd',help='You wann to execute commands')
(options,args)=parser.parse_args()
print options.server,options.cmd logger=logging.getLogger()
logger.setLevel(logging.DEBUG) ch=logging.StreamHandler()
cc=logging.handlers.RotatingFileHandler('log.txt', maxBytes = 1024*1024, backupCount = 5) formatter=logging.Formatter("%(asctime)s-%(name)s-%(levelname)s %(message)s")
ch.setFormatter(formatter)
cc.setFormatter(formatter) logger.addHandler(ch)
logger.addHandler(cc) #ssh functions
def connect(ip,username,password,port,prompt=']#'):
try:
ssh_newkey='Are you sure you want to continue connecting'
child=pexpect.spawn('ssh '+username + '@'+ip+' -p '+port,maxread=5000)
child.logfile=fout
i=child.expect([prompt,'assword:*',ssh_newkey,'refused',pexpect.TIMEOUT,'key.*? failed'])
print i
#if not False:
# print child.before,child.after
if i==0:
pass
elif i==1:
print password
child.sendline(password)
elif i==2:
child.sendline('yes')
elif i==4:
raise Exception('Error TIMEOUT!')
elif i==3:
print 'Connect refused'
elif i==5:
print child.before,child.after
os.remove(os.path.expanduser('~')+'/.ssh/known_hosts') child.expect('#')
print child.after,child.before child.sendline(options.cmd)
child.expect('#')
print child.before,child.after
print 'The command %s result is:' % options.cmd
print child.before
except Exception,e:
logger.error("Connect Error") #check -s isn't exits
if os.path.exists(options.server):
filename=options.server
pass
else:
print 'Please check %s and ip.txt is exits' % options.server
exit(-1) #execute
fout=file('mylog.txt','w') for line in open(filename):
ip,user,passwd,port=line.strip().split()
print '*'*50
print 'The follow ip is %s:' % ip
p=multiprocessing.Pool(processes=4)
result=p.apply_async(connect,[ip,user,passwd,port])
print result.get()
#connect(ip,user,passwd,port)

E-mail:362299908@qq.com

批量远程执行linux服务器程序--基于pxpect(多进程、记日志版)的更多相关文章

  1. 批量远程执行linux服务器程序--基于paramiko(多线程版)

    批量远程执行linux服务器程序--基于paramiko paramiko模块是用python语言写的一个模块,遵循SSH2协议,支持以加密和认证的方式,进行远程服务器的连接 具体安装方法这里不写,网 ...

  2. java远程执行linux服务器上的shell脚本

    业务场景:需要从服务器A中新增的文件同步至本地服务器,服务器A中内存有限,需同步成功之后清除文件. Java调用远程shell脚本,需要和远程服务器建立ssh链接,再调用指定的shell脚本. 1.创 ...

  3. SecureCRT远程ssh linux服务器,利用X11本地图形化wireshark抓包,

    平时学习抓包,使用wireshark很方便,直接图形化界面抓包,近期项目中遇到了需要通过SecureCRT ssh到linux服务器上面,还要在抓包, 1.简单使用网络数据包截获分析工具tcpdump ...

  4. Linux服务器程序--大数据量高并发系统设计

         在Linux服务器程序中,让系统能够提供以更少的资源提供更多的并发和响应效率决定了程序设计价值!怎样去实现这个目标,它其实是这么多年以来一直追逐的东西.最开始写代码时候,省去一个条件语句.用 ...

  5. Linux 高性能服务器编程——Linux服务器程序规范

    问题聚焦:     除了网络通信外,服务器程序通常还必须考虑许多其他细节问题,这些细节问题涉及面逛且零碎,而且基本上是模板式的,所以称之为服务器程序规范.     工欲善其事,必先利其器,这篇主要来探 ...

  6. java使用Jsch实现远程操作linux服务器进行文件上传、下载,删除和显示目录信息

    1.java使用Jsch实现远程操作linux服务器进行文件上传.下载,删除和显示目录信息. 参考链接:https://www.cnblogs.com/longyg/archive/2012/06/2 ...

  7. widows本地-xshell实现远程连接linux服务器图形界面

    本地环境远程连接linux图形界面,常用的实现工具有,VNC.Puty.Xshell等,这里我们用的xshell manager: Xmanager简介:Xmanager是一个运行于 Windows平 ...

  8. widows终端远程连接Linux服务器

    一.前言 为什么不是远程连接Linux服务器? 因为我不会,远程连接window我就用电脑自带的“远程桌面连接”. 以下所述都是在CentOS操作系统下的. 服务器刚换成Linux的时候很迷茫,感觉无 ...

  9. 利用java实现可远程执行linux命令的小工具

    在linux的脚本中,如果不对机器做其他的处理,不能实现在linux的机器上执行命令.为了解决这个问题,写了个小工具来解决这个问题. 后面的代码是利用java实现的可远程执行linux命令的小工具,代 ...

随机推荐

  1. JavaScript(二):JavaScript语法及数据类型

    一.JavaScript语法 1.区分大小写ECMAScript中的一切,包括变量.函数名和操作符都是区分大小写的.例如:text和Text表示两种不同的变量.2.标识符所谓标识符,就是指变量.函数. ...

  2. java-关于getClass().getClassLoader()

    源地址:http://blog.sina.com.cn/s/blog_6ec6be0e01011xof.html InputStream is = getClass().getClassLoader( ...

  3. 看了这个才发现jQuery源代码不是那么晦涩

    很多人觉得jquery.ext等一些开源js源代码 十分的晦涩,读不懂,遇到问题需要调试也很费劲.其实我个人感觉主要是有几个方面的原因: 1.对一些js不常用的语法.操作符不熟悉 2.某个functi ...

  4. VMware ESXi 不支持NTFS格式的USB外接硬盘

    本来想搞直通USB外接大容量硬盘(希捷Seagate Backup+ Hub WH 8T),实现在同一部ESXi下,直接将NAS的数据转移到外接硬盘.结果发现虚拟机下的win server系统识别不了 ...

  5. perl readlink 函数-返回软链接指向的文件

    readlink 函数专门用于处理链接,可以返回该链接指向的文件的路径 代码示例: print readlink($prog) if (-f $prog && -l $prog):

  6. 本来想用jsonp来跨域请求的,但sb写接口的,不改返回值。。。只得在后台请求接口了。。。

    string url = "ssss.com";//demo里的是get请求 HttpWebResponse w = HttpHelper.CreateGetHttpRespons ...

  7. Project Navigator Help: Creating a Workspace in Xcode

    Creating a Workspace Start a multiproduct development endeavor by creating a workspace. 1.Choose Fil ...

  8. SharePoint 2013 workflow cannot start automatically when you logged in site as a system account

    I have created one simple workflow on custom list using SharePoint designer 2013.While designing wor ...

  9. 不定义JQuery插件 不要说会JQuery

    二.普及JQuery知识 知识1:用JQuery写插件时,最核心的方法有如下两个: $.extend(object) 可以理解为JQuery 添加一个静态方法. $.fn.extend(object) ...

  10. mysql优化方法积累

    1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引. 2.应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索 ...