Python脚本远程批量执行命令
2015-11-13 20:31
459 查看
背景
本文主要写用python脚本远程连接多台服务器,然后批量执行命令,最终返回命令执行结果。
这个可以说是Ansible,Puppet等工具的最简单的雏形。
做运维的同学应该都知道的。
正文
multi_task.py
[code]#_*_coding:utf-8_*_ import multiprocessing import paramiko import getpass import ConfigParser class MultiTask(object): '''handles all the multi task works''' def __init__(self): msg = self._interactive() self.__run_cmd(msg) def __show_cmd_list(self,msg): '''show all available cmd list''' help_content = ''' run_cmd run cmd on multiple hosts run_cmd -u remote_user -g group1,group2 -cmd pwd run_cmd -u remote_user -re regular expression -cmd pwd ''' def _interactive(self):
[code] msg = [] nodes = [] #parse setting.conf Config = ConfigParser.ConfigParser() Config.read("./setting.conf") groups = Config.sections() print groups # Input group name while True: try: group = raw_input("\033[33;1mPlease Input Group Name:\033[0m").strip() if len(group) == 0 : continue elif group not in groups: print "Wrong group name ! Please input again!" continue else :
[code] print "You have choose group %s , the children in this group are :" % group break except (KeyboardInterrupt): print '\n' exit(1) items = dict(Config.items(group)) for node in items.values(): nodes.append(node) print node # Input command while True: try: cmd = raw_input("\033[33;1mPlease Input Command:\033[0m").strip() if len(cmd) == 0 : continue else: break except (KeyboardInterrupt): print '\n' exit(1) print "Command you input is %s" % cmd
[code] # Input username and password while True: try: username = raw_input("\033[33;1mPlease Input username:\033[0m").strip() if len(username) == 0 : continue else: break except (KeyboardInterrupt): print '\n' exit(1) password = getpass.getpass() msg = [nodes,username,password,cmd] print msg return msg def __run_cmd(self,msg): pool = multiprocessing.Pool(5) lock = multiprocessing.Manager().Lock() res_list = [] #msg = [['10.9.214.10','haohzhang','871102_Hadoop'],['10.9.214.105','haohzhang','
[code]871102_Hadoop'],['10.9.214.106','haohzhang','871102_Hadoop']] for host in msg[0]: p = pool.apply_async(run_task, args=(host,msg[1:],lock)) res_list.append(p) pool.close() pool.join() print '--------All task are finished!-------' def run_task(host,msg,lock): ip = host username = msg[0] password = msg[1] cmd = msg[2] print "ip %s, username %s, passwd %s, cmd %s" % (ip, username, password, cmd) port = 22 s = paramiko.SSHClient() #绑定实例 s.load_system_host_keys() #加载本机know host主机文件 s.set_missing_host_key_policy(paramiko.AutoAddPolicy()) try: s.connect(ip,port
[code],username,password,timeout=5) #连接远程主机 stdin,stdout,stderr = s.exec_command(cmd) #执行命令 cmd_result = stdout.read(),stderr.read() #读取命令结果 lock.acquire() print '----------- HOST:%s IP:%s -------------' %(username,ip) for line in cmd_result: print line, lock.release() s.close() except Exception,e: print '----------- HOST:%s IP:%s -------------' %(username,ip) print '\033[31;1mError:%s\033[0m' % e # vim:ts=4:sw=4:expandtab
setting.conf
[code][datanodes] node1=10.9.214.10 node2=10.9.214.105 node3=10.9.214.106 node4=10.9.214.113 [masternodes] masternode=10.9.214.15
main.py
[code]from multi_task import MultiTask, run_task tasks = MultiTask()
运行方法:
python main.py
相关文章推荐
- python写的批量操作远程主机脚本(命令执行,上传、下载文件)
- python写的批量操作远程主机脚本(命令执行,上传、下载文件)
- Python脚本远程批量执行命令
- python写的批量操作远程主机脚本(命令执行,上传、下载文件)
- python写的批量操作远程主机脚本(命令执行,上传、下载文件)
- 利用python fabric模块写的批量操作远程主机脚本(命令执行,上传、下载文件)
- python写的批量操作远程主机脚本(命令执行,上传、下载文件)
- python写的批量操作远程主机脚本(命令执行,上传、下载文件)
- python写的批量操作远程主机脚本(命令执行,上传、下载文件)
- 十七周四次课 2018.03.05 expect脚本同步文件、expect脚本指定host和要同步的文件、构建文件分发系统、批量远程执行命令
- python批量操作Linux服务器脚本,ssh密码登录(执行命令、上传、下载)(一)
- linux下远程服务器批量执行命令及SFTP上传文件 -- python实现
- expect脚本同步文件、指定host和要同步的文件、构建文件分发系统、批量远程执行命令
- python 批量远程执行SQL SERVER 脚本
- 十七周四次课(11月30日) 20.31 expect脚本同步文件 20.32 expect脚本指定host和要同步的文件 20.33 构建文件分发系统 20.34 批量远程执行命令
- Shell 脚本远程批量执行命令
- linux远程批量执行命令的shell脚本
- expect脚本同步文件,构建文件分发系统,批量远程执行命令
- python批量操作Linux服务器脚本,key登录(执行命令、上传、下载)(二)
- python脚本实现本地或远程执行命令