sele 发表于 2018-8-16 12:17:15

python paramiko 执行命令

#!/usr/bin/python# encoding=utf-8# Filename: paramiko_test.pyimport datetimeimport threadingimport paramikodef 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,username,passwd)
  
    downloadFile(servers,username,passwd)


页: [1]
查看完整版本: python paramiko 执行命令