批量远程执行linux服务器程序--基于paramiko(多线程版)
批量远程执行linux服务器程序--基于paramiko
paramiko模块是用python语言写的一个模块,遵循SSH2协议,支持以加密和认证的方式,进行远程服务器的连接
具体安装方法这里不写,网上一大把
#!/usr/bin/python
#coding:utf-8
import paramiko
import threading
import os,sys,time
import subprocess
from optparse import OptionParser
import logging usage='%prog [-h][-f file][-c CMDS][--version]' parser=OptionParser(usage=usage,version='HuZhiQiang 2.0_20150618')
parser.add_option('-f','--File',dest='server',default='ip.txt',help='The Server Info')
parser.add_option('-c','--CMDS',dest='cmd',default="uptime,top -n 1,df -Ph |awk 'NR == 1 || NR == 6{print $0}',ifconfig |awk 'NR==8'|sed 's/^\s*//g'",help='You wann to execute commands')
(options,args)=parser.parse_args()
#日志记录这里注释了,有需要的可以打开
'''
logging.basicConfig(Level=logging.INFO)
logger=logging.getLogger(__name__) handler=logging.FileHandler('rem.log')
handler.setLevel(logging.INFO)
formatter=logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
handler.setFormatter(formatter) logger.addHandler(handler)
'''
#print options.server,options.cmd def ssh2(ip,pt,pw,us,comm):
try: ssh = paramiko.SSHClient()
ssh.load_system_host_keys()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
#logging.INFO( "%s %s %s" % ('*'*50,ip,'*'*50) )
ssh.connect(ip,port=pt,username=us,password=pw)
f.write(('='*20 +'%s status' +'='*20 + '\n')% ip)
for COMM in comm:
#print COMM
stdin,stdout,stderr = ssh.exec_command(COMM)
print "%s The command %s result is:\n" % (time.strftime("%Y%m%d %H:%M:%S"),COMM)
read = stdout.read()
print read
print '-'*60
f.write(read)
ssh.close() # except SyntaxError:
# print "please checking"
# sys.exit()
except:
print "SSH Connection refused"
print "-" *60
sys.exit() if __name__ == '__main__':
if os.path.exists(options.server):
filename=options.server
pass
else:
print 'Please check %s and ip.txt is exits' % options.server
exit(-1) print "\033[1;31m ...... 请等待......\033[0m"
open_ip = open(options.server)
f = open('Allsystem.log','a')
paramiko.util.log_to_file('paramiko.log')
up='uptime'
df = "df -Ph |awk 'NR == 1 || NR == 6{print $0}'"
net="ifconfig |awk 'NR==8'|sed 's/^\s*//g'"
command = []
command=options.cmd.split(',')
print command
#command.append(options.cmd)
for line in open_ip.readlines():
#for line in subprocess.Popen('cat ip.txt',shell=True).communicate()[0]:
ip,user,passwd,port=line.strip().split()
cmm=['ping','-c','','-w','']
cmm.extend(ip.split())
#print cmm
a=subprocess.Popen(cmm,stdout=subprocess.PIPE)
a.wait()
b=a.returncode
if b==0:
print "%s is up" % ip
port=int(port)
aa = threading.Thread(target=ssh2,args=(ip,port,passwd,user,command))
aa.start()
aa.join()
else:print "%s id down" % ip
open_ip.close()
f.write('='*20 +'All done' +'='*20 + '\n')
f.flush()
f.close()
运行结果如下:

批量远程执行linux服务器程序--基于paramiko(多线程版)的更多相关文章
- 批量远程执行linux服务器程序--基于pxpect(多进程、记日志版)
#!/usr/bin/python '''Created on 2015-06-09@author: Administrator''' import pexpect import os,sys fro ...
- java远程执行linux服务器上的shell脚本
业务场景:需要从服务器A中新增的文件同步至本地服务器,服务器A中内存有限,需同步成功之后清除文件. Java调用远程shell脚本,需要和远程服务器建立ssh链接,再调用指定的shell脚本. 1.创 ...
- SecureCRT远程ssh linux服务器,利用X11本地图形化wireshark抓包,
平时学习抓包,使用wireshark很方便,直接图形化界面抓包,近期项目中遇到了需要通过SecureCRT ssh到linux服务器上面,还要在抓包, 1.简单使用网络数据包截获分析工具tcpdump ...
- Linux服务器程序--大数据量高并发系统设计
在Linux服务器程序中,让系统能够提供以更少的资源提供更多的并发和响应效率决定了程序设计价值!怎样去实现这个目标,它其实是这么多年以来一直追逐的东西.最开始写代码时候,省去一个条件语句.用 ...
- Linux 高性能服务器编程——Linux服务器程序规范
问题聚焦: 除了网络通信外,服务器程序通常还必须考虑许多其他细节问题,这些细节问题涉及面逛且零碎,而且基本上是模板式的,所以称之为服务器程序规范. 工欲善其事,必先利其器,这篇主要来探 ...
- java使用Jsch实现远程操作linux服务器进行文件上传、下载,删除和显示目录信息
1.java使用Jsch实现远程操作linux服务器进行文件上传.下载,删除和显示目录信息. 参考链接:https://www.cnblogs.com/longyg/archive/2012/06/2 ...
- widows本地-xshell实现远程连接linux服务器图形界面
本地环境远程连接linux图形界面,常用的实现工具有,VNC.Puty.Xshell等,这里我们用的xshell manager: Xmanager简介:Xmanager是一个运行于 Windows平 ...
- widows终端远程连接Linux服务器
一.前言 为什么不是远程连接Linux服务器? 因为我不会,远程连接window我就用电脑自带的“远程桌面连接”. 以下所述都是在CentOS操作系统下的. 服务器刚换成Linux的时候很迷茫,感觉无 ...
- 利用java实现可远程执行linux命令的小工具
在linux的脚本中,如果不对机器做其他的处理,不能实现在linux的机器上执行命令.为了解决这个问题,写了个小工具来解决这个问题. 后面的代码是利用java实现的可远程执行linux命令的小工具,代 ...
随机推荐
- java-javaweb_URL重写
Java WEB实现URL重写的优缺点及如何实现: http://blog.csdn.net/cselmu9/article/details/8062033 urlrewrite 地址重写: http ...
- FFmpeg API变化
可以查看doc目录下的APIchanges和根目录下的Changelog 去掉了ffserver程序 'avcodec_register_all' is deprecated 还有av_regis ...
- R语言进阶之4:数据整形(reshape)
一.通过重新构建数据进行整形 数据整形最直接的思路就把数据全部向量化,然后按要求用向量构建其他类型的数据.这样是不是会产生大量的中间变量.占用大量内存?没错.R语言的任何函数(包括赋值)操作都会有同样 ...
- 让IE6支持min-height,max-height等的方法
1.IE6支持max-height解决方法 IE6支持最大高度解决CSS代码:.yangshi{max-height:1000px;_height:expression((document.do ...
- e684. 以多种格式打印
A Book object is used when printing pages with different page formats. This example prints the first ...
- 【Java面试题】20 运行时异常和一般异常有何区别
Throwable 是所有 Java 程序中错误处理的父类 ,有两种资类: Error 和 Exception . Error :表示由 JVM 所侦测到的无法预期的错误,由于这是属于 JVM 层次的 ...
- SQL 模糊查询LIKE concat用法
concat用来拼接查询的字符串,如下代码所示 SELECT * FROM deployment WHERE name LIKE concat(concat('%',#{queryMessage}), ...
- mysql 启动报错--发现系统错误2,系统找不到指定的文件。
解决方法: 控制面板--找到mysql程序--修复
- zookper3.4.6集群配置
参考链接: http://blog.csdn.net/shirdrn/article/details/7183503 个人感觉zookeeper 安装在单机上无操作意义,所以直接记录集群配置过程. 连 ...
- Oracle 之 SQL 面试题 录
多上网查查 SQL 面试题 1.学号(自动编号) 姓名 性别 年龄 0001 xw 男 18 0002 mc 女 16 0003 ww 男 21 0004 xw 男 18 请写出实现如下 ...