python批量操作Linux服务器脚本,key登录(执行命令、上传、下载)(二)
1 #-*- coding: utf- -*- 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=,username=username , pkey=mykey,timeout=) 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\tOK\n'%(ip) 27 ssh.close() 28 except Exception,ex: 29 print Exception,":",ex 30 print '%s\tError\n'%(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,)) 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, )) 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="" 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() # 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相关的网址
[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实例
python批量操作Linux服务器脚本,key登录(执行命令、上传、下载)(二)的更多相关文章
- python批量操作Linux服务器脚本,ssh密码登录(执行命令、上传、下载)(一)
-*- paramiko.util.log_to_file( ssh = paramiko.SSHClient() ssh.set_missing ...
- [转]python3之paramiko模块(基于ssh连接进行远程登录服务器执行命令和上传下载文件的功能)
转自:https://www.cnblogs.com/zhangxinqi/p/8372774.html 阅读目录 1.paramiko模块介绍 2.paramiko的使用方法 回到顶部 1.para ...
- linux下常用FTP命令 上传下载文件【转】
1. 连接ftp服务器 格式:ftp [hostname| ip-address]a)在linux命令行下输入: ftp 192.168.1.1 b)服务器询问你用户名和密码,分别输入用户名和相应密码 ...
- linux服务器创建虚拟路径解决文件上传路径隔离问题
需求环境 图片上传最简单的就是上传web项目下,这样图片与项目不可分离会产生很多不必要的影响.例如:重新部署项目需要把所有上传的图片再copy一份等. 图片与项目分离有好几种方式: 方式一.在linu ...
- 初级版python登录验证,上传下载文件加MD5文件校验
服务器端程序 import socket import json import struct import hashlib import os def md5_code(usr, pwd): ret ...
- Linux学习笔记:使用ftp命令上传和下载文件
Linux中如何使用ftp命令,包括如何连接ftp服务器,上传or下载文件以及创建文件夹.虽然现在有很多ftp桌面应用(例如:FlashFXP),但是在服务器.SSH.远程会话中掌握命令行ftp的使用 ...
- linux使用命令上传下载文件 -- lrzsz
之前都是用Xftp工具在本地和linux系统之间上传下载文件,最近觉得麻烦,因为平时用Xshell连接,要传输文件的时候还要额外使用别的工具,下面是lrzsz的安装和简单的使用过程: 详细的使用可以s ...
- Linux 普通用户拿到root权限及使用szrz命令上传下载文件
1.如何拿到root权限 在shell里如果看到你的命令输入行最前面显示的是 $符号,说明目前账号只有系统的普通权限. 输入:sudo su 这时能看到shell的输入行最前面已经显示的是#号,说明已 ...
- ssh远程登录+查看系统版本+使用scp命令上传下载
ssh远程登录命令简单实例 ssh命令用于远程登录上Linux主机. 常用格式:ssh [-l login_name] [-p port] [user@]hostname 更详细的可以用ssh ...
随机推荐
- VMware NAT模式多个虚拟机相互访问
在一台主机上只允许有一个NAT模式的虚拟网络.因此,同一台主机上的多个采用NAT模式网络连接的虚拟机也是可以相互访问的.
- Grunt相关
安装Grunt 在命令行输入npm install -g grunt-cli
- 凸优化&非凸优化问题
转载知乎大神的回答:Robin Shen 参考:https://www.zhihu.com/question/20343349
- 使用idea创建maven多模块项目
前言 参看:http://blog.csdn.net/zht666/article/details/19040733 使用Maven管理项目时,往往需要创建多个模块,模块之间存在相互引用的关系.对于M ...
- 代码:jquery小效果—— 吸顶
吸顶: 可以防止滚屏过程中,代码被多次调用 <script src="http://cdn.bootcss.com/jquery/1.11.1/jquery.min.js"& ...
- 44.纯 CSS 创作背景色块变换的按钮特效
原文地址:https://segmentfault.com/a/1190000015192218 感想: 伪元素作为背景变化. HTML code: <nav> <ul> &l ...
- Mybatis八( mybatis工作原理分析)
MyBatis的主要成员 Configuration MyBatis所有的配置信息都保存在Configuration对象之中,配置文件中的大部分配置都会存储到该类中 SqlSession ...
- CSS3 过渡动画
实现如下效果:当鼠标移动到图片上是图片有类似于放大镜放大的效果 transition : CSS属性 时间 当transition中监测的css属性发生变化时,会触发动画 .img_box img{ ...
- Git安装和基本使用(1)
参考廖雪峰GIt教程 https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000/00137 ...
- 深度学习原理与框架-神经网络-线性回归与神经网络的效果对比 1.np.c_[将数据进行合并] 2.np.linspace(将数据拆成n等分) 3.np.meshgrid(将一维数据表示为二维的维度) 4.plt.contourf(画出等高线图,画算法边界)
1. np.c[a, b] 将列表或者数据进行合并,我们也可以使用np.concatenate 参数说明:a和b表示输入的列表数据 2.np.linspace(0, 1, N) # 将0和1之间的数 ...