python ssh 客户端 多线程

#!/usr/bin/python2.6
import os
import time
import paramiko
import ConfigParser
import threading
import Queue
import optparse
 
class thread_ssh(threading.Thread):
    def __init__(self,work_queue):
        super(thread_ssh,self).__init__()
        self.work_queue = work_queue
    def run(self):
        while True:
            try:
                machine = self.work_queue.get()
                self.process(machine)
            finally:
                self.work_queue.task_done()
 
    def process(self,machine):
        hostname=str(machine[1]).strip()
        port=int(machine[2])
        username=str(machine[3]).strip()
        password=str(machine[4]).strip()
        cmd=';'.join( machine[5:])
        ssh = paramiko.SSHClient()
        ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
        ssh.load_system_host_keys()
        #ssh.load_host_keys('/root/.ssh/known_hosts')
        ssh.connect(hostname,port,username,password)
        (stdin,stdout,stderr)=ssh.exec_command(cmd)
        output=stdout.read()
        pid=os.getpid()
        print "The %s run in  %s"  %(self.name,hostname)
        print output
        info.write('n=======================n====>>'+hostname+'n=======================nn')
        info.write(output)
        info.flush()
        ssh.close()
 
def read_cfg_file(file):
    machines = []
    config = ConfigParser.ConfigParser()
    config.read(file)
    host_items = config.items("HOST")
    cmd_items = config.items("CMD")
    for item in host_items:
         host=item[1].split() 
         for cmd_item in cmd_items:
             host.append(cmd_item[1])
         machines.append(host)
    return machines 
 
def parse_options():
     description = "A ssh client with thread."
     usage="usage: %prog [options]n       Please use --helpnnAuthor: mrmuxl@sina.com"
     version = "Version: %prog 0.1 nAuthor: mrmuxl@sina.com"
     parser = optparse.OptionParser(description = (description),usage = (usage),version=(version))
     parser.add_option("-c","--config",action="store",type="string",dest="config",default="pssh.cfg",help="program's config file")
     parser.add_option("-o","--outpufile",action="store",type="string",dest="outputfile",default="outputfile.log",help="program's output file")
     parser.add_option("-l","--logfile",action="store",type="string",dest="logfile",default="ssh.log",help="ssh client running log") 
     opts,args=parser.parse_args()
     return opts,args
 
if __name__ == '__main__':
 
    start_cpu = time.clock()
    start_real = time.time()
 
    opts,args = parse_options()
    paramiko.util.log_to_file(opts.logfile)
    info=open(opts.outputfile,'a')
    hosts=read_cfg_file(opts.config)
 
 
    work_queue = Queue.Queue()
 
    for i in range(9):
        pssh =thread_ssh(work_queue)
        pssh.daemon=True
        pssh.start()
 
    for machine in hosts:
        if machine[0] == 'On' or machine[0] == 'on' or machine[0] == 'ON':
            work_queue.put(machine)
    work_queue.join()
 
    info.close()
    end_cpu = time.clock()
    end_real = time.time()
 
    print("%f Real Seconds" % (end_real - start_real))
    print("%f CPU Seconds" % (end_cpu - start_cpu))

还没有评论,快来抢沙发!

发表评论

  • 😉
  • 😐
  • 😡
  • 😈
  • 🙂
  • 😯
  • 🙁
  • 🙄
  • 😛
  • 😳
  • 😮
  • emoji-mrgree
  • 😆
  • 💡
  • 😀
  • 👿
  • 😥
  • 😎
  • ➡
  • 😕
  • ❓
  • ❗
  • 67 queries in 0.369 seconds