zoukankan      html  css  js  c++  java
  • python批量操作Linux服务器脚本,key登录(执行命令、上传、下载)(二)

     

      1 #-*- coding: utf-8 -*-
      2 #批量操作linux服务器(执行命令,上传,下载)
      3 #!/usr/bin/python
      4 import paramiko
      5 import datetime
      6 import os
      7 import threading
      8 def ssh2(ip,username,privatekeyfile,keypwd,cmd):
      9     try:
     10         paramiko.util.log_to_file('paramiko________.log')
     11         ssh = paramiko.SSHClient()
     12         ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
     13         #privatekeyfile = "D:\batch\id_dsa_1024"
     14         mykey=paramiko.DSSKey.from_private_key_file(filename=privatekeyfile,password=keypwd)
     15         ssh.connect(hostname=ip,port=22,username=username , pkey=mykey,timeout=5)
     16         for m in cmd:
     17             stdin,stdout,stderr = ssh.exec_command(m)
     18             #stdin.write("Y")   #简单交互,输入 ‘Y’
     19             out = stdout.readlines()
     20             # outerr = stderr.readlines()
     21             #屏幕输出
     22             for o in out:
     23                 print o,
     24             # for i in outerr:
     25             #     print i,
     26                 print '%s OK '%(ip)
     27         ssh.close()
     28     except Exception,ex:
     29         print Exception,":",ex
     30         print '%s Error '%(ip)
     31 def download(ip,username,privatekeyfile,keypwd,local_dir, remote_dir):
     32    try:
     33         paramiko.util.log_to_file('paramiko_download.log')
     34         t = paramiko.Transport((ip,22))
     35         mykey=paramiko.DSSKey.from_private_key_file(filename=privatekeyfile,password=keypwd)
     36         t.connect(username = username, pkey=mykey)
     37         sftp = paramiko.SFTPClient.from_transport(t)
     38         files = sftp.listdir(remote_dir)
     39         for f in files:
     40             print ''
     41             print '############################'
     42             print 'Beginning to download file  from %s  %s ' % (ip, datetime.datetime.now())
     43             print 'Downloading file:', os.path.join(remote_dir, f)
     44             sftp.get(os.path.join(remote_dir, f), os.path.join(local_dir, f))#下载
     45             print 'Download file success %s ' % datetime.datetime.now()
     46             print ''
     47             print '############################'
     48         t.close()
     49    except Exception,ex:
     50         print Exception,":",ex
     51         print "connect error!"
     52         print ip, "fail!"
     53 
     54 
     55 def upload(ip, username,privatekeyfile, keypwd, local_dir, remote_dir):
     56     try:
     57         paramiko.util.log_to_file('paramiko_upload.log')
     58         t = paramiko.Transport((ip, 22))
     59         mykey=paramiko.DSSKey.from_private_key_file(filename=privatekeyfile,password=keypwd)
     60         t.connect(username = username, pkey=mykey)
     61         sftp = paramiko.SFTPClient.from_transport(t)
     62         files = os.listdir(local_dir)
     63         for f in files:
     64             print ''
     65             print '############################'
     66             print 'Beginning to upload file  to %s  %s ' % (ip, datetime.datetime.now())
     67             print 'Uploading file:', os.path.join(local_dir, f)
     68             sftp.put(os.path.join(local_dir, f), os.path.join(remote_dir, f))#上传
     69             print 'Upload file success %s ' % datetime.datetime.now()
     70             print ''
     71             print '############################'
     72         t.close()
     73     except Exception,ex:
     74         print Exception,":",ex
     75         print "connect error!"
     76         print ip, "fail!"
     77 
     78 
     79 if __name__=='__main__':
     80   #  cmd = ['ls -lh /export/servers/mysql/log/mysql.log']#你要执行的命令列表
     81     cmds=open("D:\batch\cmds.txt") #从文件读取命令
     82     cmd=cmds.readlines()
     83     cmds.close()
     84     username = "root"  #用户名
     85     privatekeyfile = "D:\batch\id_dsa_all"
     86     keypwd="123456"
     87     #passwd = "xxxx"    #单台服务器时启用----------------------
     88     #ip='192.168.12.19'  #单台服务器时启用----------------------
     89     local_dir = "D:\batch\tmp"  #本地服务器目录
     90     remote_dir = "/tmp/temp/" #远程服务器目录
     91     #threads = []   #多线程
     92     print "Begin......"
     93     hosts=open("D:\batch\ip.txt") #本地服务器列表
     94     host=hosts.readlines()
     95     hosts.close()
     96     for ip in host:
     97         ip=ip.strip()
     98         # b=threading.Thread(target=upload,args=(ip,username,privatekeyfile,keypwd,local_dir,remote_dir))
     99         # b.start()
    100         # c=threading.Thread(target=download,args=(ip,username,privatekeyfile,keypwd,local_dir,remote_dir))
    101         # c.start()
    102         a=threading.Thread(target=ssh2,args=(ip,username,privatekeyfile,keypwd,cmd))
    103         a.start()

    #和Paramiko相关的网址 [plain]view plaincopyprint? #http://docs.paramiko.org/en/1.13/api/keys.html paramiko帮助 [plain]view plaincopyprint? #https://github.com/paramiko/paramiko paramiko源码 [plain]view plaincopyprint? #http://nullege.com/codes/search/paramiko paramiko实例
  • 相关阅读:
    Ubuntu下快速建立跨多个平台的cocos2d-x项目
    转盘抽奖效果练习
    javascript网页弹出层练习
    PHP中Terminal提示不是内部或外部命令,也不是可运行的程序问题解决
    网页授权获取用户信息(自我总结)
    用easywechat开发微信支付功能以及红包接口调用注意事项
    微信公众平台开发步骤(包括自定义菜单、网页授权、分享功能)
    laravel-wechat 配置安装
    第1讲 html介绍 html运行原理
    总结学习方向
  • 原文地址:https://www.cnblogs.com/zhuhongbao/p/3820448.html
Copyright © 2011-2022 走看看