用Python多线程和paramiko给主机组批量分发命令和传送文件
2016-08-23 16:30
489 查看
需求:
1、用Python的多线程对主机组批量分发命令
2、需要有传送文件的功能
3、把输出的日志信息写到日志文件(包括正确输出日志,和错误输出日志,包含日志写入的时间)
准备工作:
1、把需要远程控制分发命令的机器(被控端)配置好ssh+key2、下载第三方模块包
pycrypto-2.6.tar.gz http://pan.baidu.com/s/1dFHSvcP
paramiko-1.10.1.tar.gz http://pan.baidu.com/s/1hrWzg7y
在控制服务器端编译安装第三方模块包:
脚本内容:
目录展示:
执行脚本展示:
错误命令输入:
再次查看当前目录:
1、用Python的多线程对主机组批量分发命令
2、需要有传送文件的功能
3、把输出的日志信息写到日志文件(包括正确输出日志,和错误输出日志,包含日志写入的时间)
准备工作:
1、把需要远程控制分发命令的机器(被控端)配置好ssh+key2、下载第三方模块包
pycrypto-2.6.tar.gz http://pan.baidu.com/s/1dFHSvcP
paramiko-1.10.1.tar.gz http://pan.baidu.com/s/1hrWzg7y
在控制服务器端编译安装第三方模块包:
[root@test1 opt]# yum install gcc python-devel [root@test1 opt]# tar xf pycrypto-2.6.1.tar.gz [root@test1 opt]# cd pycrypto-2.6.1 [root@test1 pycrypto-2.6]# python setup.py build [root@test1 pycrypto-2.6]# python setup.py install [root@test1 pycrypto-2.6]# cd .. [root@test1 opt]# tar xf paramiko-1.10.1.tar.gz [root@test1 opt]# cd paramiko-1.10.1 [root@test1 paramiko-1.10.1]# python setup.py build [root@test1 paramiko-1.10.1]# python setup.py install
脚本内容:
[root@test1 opt]# cat issue_comm.py #!/usr/bin/env python #coding:utf-8 import threading import paramiko import time import sys while True: try: time.sleep(3) comd = raw_input('请输入你要批量分发的命令(输入1传送文件):') except: sys.exit() else: #哪果输入为exit就退出系统 if comd == 'exit': sys.exit() if comd == '1': try: yuan = raw_input('请输入你源服务器文件文件的路径,如/opt/test.txt:') mb = raw_input('请输入你目标服务器存放文件的路径:如/opt/test1.txt:') except: sys.exit() #定义IP最后一位的初始值 num = 9 #日志文件 succ = '/opt/log.txt' err = '/opt/error.txt' def run(n): #输入Key的路径 private_key_path = '/root/.ssh/id_rsa' #获得key key = paramiko.RSAKey.from_private_key_file(private_key_path) #获取连接ssh方法 ssh = paramiko.SSHClient() #允许连接不在know_hosts文件中的主机 ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) #把局部变量设为全局变量 global num global yuan global mb if comd == '1': #加锁 samp.acquire() #三台机器的IP地址 num += 1 ip='192.168.200.%s' %num t = paramiko.Transport((ip,22)) t.connect(username='root',pkey=key) sftp = paramiko.SFTPClient.from_transport(t) sftp.put(yuan,mb) t.close() #解锁 samp.release() else: #加锁 samp.acquire() #三台机器的IP地址 num += 1 ip='192.168.200.%s' %num ##连接相关信息 ssh.connect(hostname=ip, port=22, username='root', pkey=key) #执行命令 stdin, stdout, stderr = ssh.exec_command(comd) #获取执行命令的时间 sj = time.strftime('%Y-%m-%d %H:%M:%S') #打开正确和错误日志文件 f = open(succ,'ab') e = open(err,'ab') #读进正确和错误信息 result_out = stdout.read() result_err = stderr.read() #把正确和错误信息写到日志文件 if result_err: e.write(sj+'\n') e.write(result_err+'\n') e.close else: f.write(sj+'\n') f.write(result_out+'\n') f.close #输出正确和错误信息 print result_out print result_err #关闭ssh连接 ssh.close(); #解锁 samp.release() #最大同时执行的线程数为3 samp = threading.BoundedSemaphore(3) #创建三个线程 if __name__ == '__main__': for i in range(3): t = threading.Thread(target=run,args=(i,)) #启动多线程 t.start()
目录展示:
执行脚本展示:
错误命令输入:
再次查看当前目录:
相关文章推荐
- 用Python多进程和paramiko给主机组批量分发命令和传送文件
- python下paramiko模块学习之四:从远程主机批量下载文件到本机
- python下paramiko模块学习之三:上传批量文件到远程主机
- Python+paramiko基于配置文件的批量主机管理
- python paramiko实现多线程远程执行命令、多线程远程上传文件、多线程远程下载文件
- python下paramiko模块学习之五:批量主机上传文件
- python写的批量操作远程主机脚本(命令执行,上传、下载文件)
- python写的批量操作远程主机脚本(命令执行,上传、下载文件)
- python下paramiko模块学习之五:批量主机上传文件
- python下paramiko模块学习之二:利用配置文件登录批量主机
- python下paramiko模块学习之二:利用配置文件登录批量主机
- python写的批量操作远程主机脚本(命令执行,上传、下载文件)
- python写的批量操作远程主机脚本(命令执行,上传、下载文件)
- 利用python fabric模块写的批量操作远程主机脚本(命令执行,上传、下载文件)
- python下paramiko模块学习之四:从远程主机批量下载文件到本机
- python写的批量操作远程主机脚本(命令执行,上传、下载文件)
- python写的批量操作远程主机脚本(命令执行,上传、下载文件)
- python下paramiko模块学习之三:上传批量文件到远程主机
- python paramiko实现多线程远程执行命令、多线程远程上传文件、多线程远程下载文件
- python写的批量操作远程主机脚本(命令执行,上传、下载文件)