python批量操作Linux服务器脚本,key登录(执行命令、上传、下载)(二)

来源:互联网 发布:免费的统计软件 编辑:程序博客网 时间:2024/05/22 14:04
#-*- coding: utf-8 -*-#批量操作linux服务器(执行命令,上传,下载)#!/usr/bin/pythonimport paramikoimport datetimeimport osimport threadingdef ssh2(ip,username,privatekeyfile,keypwd,cmd):    try:        paramiko.util.log_to_file('paramiko________.log')        ssh = paramiko.SSHClient()        ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())        #privatekeyfile = "D:\\batch\\id_dsa_1024"        mykey=paramiko.DSSKey.from_private_key_file(filename=privatekeyfile,password=keypwd)        ssh.connect(hostname=ip,port=22,username=username , pkey=mykey,timeout=5)        for m in cmd:            stdin,stdout,stderr = ssh.exec_command(m)            #stdin.write("Y")   #简单交互,输入 ‘Y’            out = stdout.readlines()            # outerr = stderr.readlines()            #屏幕输出            for o in out:                print o,            # for i in outerr:            #     print i,                print '%s\tOK\n'%(ip)        ssh.close()    except Exception,ex:        print Exception,":",ex        print '%s\tError\n'%(ip)def download(ip,username,privatekeyfile,keypwd,local_dir, remote_dir):   try:        paramiko.util.log_to_file('paramiko_download.log')        t = paramiko.Transport((ip,22))        mykey=paramiko.DSSKey.from_private_key_file(filename=privatekeyfile,password=keypwd)        t.connect(username = username, pkey=mykey)        sftp = paramiko.SFTPClient.from_transport(t)        files = sftp.listdir(remote_dir)        for f in files:            print ''            print '############################'            print 'Beginning to download file  from %s  %s ' % (ip, datetime.datetime.now())            print 'Downloading file:', os.path.join(remote_dir, f)            sftp.get(os.path.join(remote_dir, f), os.path.join(local_dir, f))#下载            print 'Download file success %s ' % datetime.datetime.now()            print ''            print '############################'        t.close()   except Exception,ex:        print Exception,":",ex        print "connect error!"        print ip, "fail!"def upload(ip, username,privatekeyfile, keypwd, local_dir, remote_dir):    try:        paramiko.util.log_to_file('paramiko_upload.log')        t = paramiko.Transport((ip, 22))        mykey=paramiko.DSSKey.from_private_key_file(filename=privatekeyfile,password=keypwd)        t.connect(username = username, pkey=mykey)        sftp = paramiko.SFTPClient.from_transport(t)        files = os.listdir(local_dir)        for f in files:            print ''            print '############################'            print 'Beginning to upload file  to %s  %s ' % (ip, datetime.datetime.now())            print 'Uploading file:', os.path.join(local_dir, f)            sftp.put(os.path.join(local_dir, f), os.path.join(remote_dir, f))#上传            print 'Upload file success %s ' % datetime.datetime.now()            print ''            print '############################'        t.close()    except Exception,ex:        print Exception,":",ex        print "connect error!"        print ip, "fail!"if __name__=='__main__':  #  cmd = ['ls -lh /export/servers/mysql/log/mysql.log']#你要执行的命令列表    cmds=open("D:\\batch\\cmds.txt") #从文件读取命令    cmd=cmds.readlines()    cmds.close()    username = "root"  #用户名    privatekeyfile = "D:\\batch\\id_dsa_all"    keypwd="123456"    #passwd = "xxxx"    #单台服务器时启用----------------------    #ip='192.168.12.19'  #单台服务器时启用----------------------    local_dir = "D:\\batch\\tmp"  #本地服务器目录    remote_dir = "/tmp/temp/" #远程服务器目录    #threads = []   #多线程    print "Begin......"    hosts=open("D:\\batch\\ip.txt") #本地服务器列表    host=hosts.readlines()    hosts.close()    for ip in host:        ip=ip.strip()        # b=threading.Thread(target=upload,args=(ip,username,privatekeyfile,keypwd,local_dir,remote_dir))        # b.start()        # c=threading.Thread(target=download,args=(ip,username,privatekeyfile,keypwd,local_dir,remote_dir))        # c.start()        a=threading.Thread(target=ssh2,args=(ip,username,privatekeyfile,keypwd,cmd))        a.start()
#和Paramiko相关的网址
#http://docs.paramiko.org/en/1.13/api/keys.html   paramiko帮助
#https://github.com/paramiko/paramiko    paramiko源码
#http://nullege.com/codes/search/paramiko  paramiko实例
0 0
原创粉丝点击