感慨,2年没上这个了,还能发现这个账号。再补个PYTHON版 2.6.6
#!/usr/bin/python
# --coding:gbk--
__author__ = 'zhangbo'
import paramiko, threading, sys, time, os
from multiprocessing import Pool
#执行线程传入分组名,主机用户信息tuple,执行命令
def do(group, lHosts, cmd):
beginTime = time.time()
#默认密码
_DEF_PWD = '****'
_DEF_SSH_PORT = 22
varTmp = lHosts[1].split('@')
varUserName = varTmp[0]
varHostIp = varTmp[1]
if len(lHosts) == 2:
varPasswd = _DEF_PWD
else:
varPasswd = lHosts[2]
if varPasswd == '': varPasswd = _DEF_PWD
# paramiko.util.log_to_file("d:/filename.log")
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(policy=paramiko.MissingHostKeyPolicy())
ssh.connect(hostname=varHostIp, port=_DEF_SSH_PORT, username=varUserName, password=varPasswd, timeout=2,allow_agent=False
, look_for_keys=False)
stdin, stdout, stderr = ssh.exec_command(cmd)
msg = '---------------group: {0} host: {1} execution time: {2} --------------\n{3}' \
.format(group, varHostIp, time.time() - beginTime, stdout.read())
ssh.close()
print msg
def _getGroup(group):
cmdRtn = os.popen("grep -w " + group + " data.dat|grep -v '#'").readlines()
cmdRtn = [x.split() for x in cmdRtn]
return cmdRtn
if __name__ == '__main__':
if (sys.argv.__len__() < 3):
print 'Please Enter 2 argv,', sys.argv.__len__() - 1, ' given'
print '''Example: tt crmexe pwd'''
sys.exit(1)
group = sys.argv[1]
cmd = sys.argv[2]
varGroups = _getGroup(group)
if not varGroups:
print 'Not Found Group', group
exit(1)
p=Pool()
#使用多进程,多线程时,在SSH连接时会耗时2秒多,比较慢 和PYTHON线程机制有关。
for hostTuple in varGroups:
p.apply_async(do,args=(group, hostTuple, cmd))
p.close()
p.join()
------------------------------------------------------
data.dat
crmexe crm@192.168.168.11
crmexe crm@192.168.168.12
webexe crm@192.168.168.13 456