Python简单主机批量管理工具
Python简单主机批量管理工具
一、程序介绍
需求:
简单主机批量管理工具需求:1.主机分组2.主机信息使用配置文件3.可批量执行命令、发送文件,结果实时返回4.主机用户名密码、端口可以不同5.执行远程命令使用paramiko模块
程序结构:
Host_manage/ #程序目录
├── bin #启动程序目录
│ └── start.py #启动程序文件
├── conf #配置目录
│ ├── __pycache__
│ │ └── settings.cpython-36.pyc
│ └── settings.py #配置文件
├── core #主程序目录
│ ├── __pycache__
│ │ └── src.cpython-36.pyc │ └── src.py #主程序 └── log
二、流程图
三、代码
bin/start.py
1 #!/usr/bin/env python 2 #_*_coding:utf-8_*_ 3 4 import os 5 import sys 6 7 BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) 8 sys.path.append(BASE_DIR) 9 print(BASE_DIR) 10 11 from core import src 12 13 if __name__ == '__main__': 14 src.run()
View Code
conf/settings.py
1 #!/usr/bin/env python 2 #_*_coding:utf-8_*_ 3 4 host_dic = { 5 "group1":{ #分组1 6 "h1":{"IP":"192.168.11.1", "username":"test001", "password":"abc", "port":22}, 7 "h2":{"IP":"192.168.11.2", "username":"test002", "password":"abc", "port":22}, 8 }, 9 "group2":{ #分组2 10 "h1":{"IP":"192.168.21.1", "username":"test003", "password":"abc", "port":22}, 11 "h2":{"IP":"192.168.21.2", "username":"test004", "password":"abc", "port":22}, 12 "h3":{"IP":"192.168.21.3", "username":"test005", "password":"abc", "port":22}, 13 }, 14 }
View Code
core/src.py
1 #!/usr/bin/env python 2 #_*_coding:utf-8_*_ 3 4 from conf import settings 5 import paramiko 6 import threading 7 import os 8 9 class Host_remote(): 10 ''' 11 批量远程管理用户组主机 12 ''' 13 #初始化 14 def __init__(self, host, port ,username, password, cmd): 15 self.host = host 16 self.port = port 17 self.username = username 18 self.password = password 19 self.cmd = cmd 20 21 def run(self): 22 ''' 23 用进程 连接远程 主机后调用 24 :return: 25 ''' 26 cmd_str = self.cmd.split()[0] 27 if hasattr(self, cmd_str): #反射 :调用put方法 28 getattr(self, cmd_str)() 29 else: 30 setattr(self, cmd_str, self.cmd) 31 getattr(self, cmd_str)() #调用cmd方法,执行批量命令处理 32 33 def cmd(self): 34 ''' 35 批量命令处理 36 :return: 37 ''' 38 ssh = paramiko.SSHClient() #创建ssh对象 39 #允许连接不在know_hosts文件中的主机 40 ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) 41 ssh.connect(hostname=self.host,port=self.port,username=self.username,password=self.password) 42 stdin,stdout,stderr = ssh.exec_cmd(self.cmd) 43 result = stdout.read() 44 print("%s".center(40, "-") % self.host) 45 print(result.decode()) 46 ssh.close() 47 48 def put(self): 49 ''' 50 发送文件 51 :return: 52 ''' 53 filename = self.cmd.split()[1] #要上传的文件 54 transport = paramiko.Transport((self.host, self.port)) 55 transport.connect(username=self.username, password=self.password) 56 sftp = paramiko.SFTPClient.from_transport(transport) 57 sftp.put(filename, filename) 58 print("put sucesss") 59 60 transport.close() 61 62 63 def show_host_list(): 64 ''' 65 选择用户组 显示 主机名 与 IP 66 :return: 67 ''' 68 for index, key in enumerate(settings.host_dic): 69 print("%s\033[34m 主机组:%s \033[0m \033[33m 主机数量:%s\033[0m" %(index + 1,key,len(settings.host_dic[key]))) 70 while True: 71 choose_host_list = input(">>(请输入用户组编号如:group1): ").strip() 72 host_dic = settings.host_dic.get(choose_host_list) 73 if host_dic: 74 for key in host_dic: 75 print(key, host_dic[key]["IP"]) 76 return host_dic 77 else: 78 print("不退出此组!") 79 80 81 def interactive(choose_host_list): 82 ''' 83 根据选择的 用户组的 主机起 多个线程进行 批量交互 84 :param choose_host_list: 85 :return: 86 ''' 87 thread_list = [] 88 while True: 89 cmd = input(">>: ").strip() 90 if cmd: 91 for key in choose_host_list: 92 host, port, username, password = choose_host_list[key]["IP"], choose_host_list[key]["port"], \ 93 choose_host_list[key]["username"], choose_host_listy[key]["password"] 94 func = Host_remote(host, port, username, password, cmd) # 实例化类 95 t = threading.Thread(target=func.run) # 起线程 96 t.start() 97 thread_list.append(t) 98 for t in thread_list: 99 t.join() # 主线程等待子线程执行完毕 100 else: 101 continue 102 103 104 def run(): 105 choose_host_list = show_host_list() 106 interactive(choose_host_list)
View Code
转载于:https://www.cnblogs.com/zhuzhiwen/p/7854276.html
Python简单主机批量管理工具相关推荐
- day9 进程 线程 threading multiprocessing 队列 主机批量管理工具
一.进程与线程 1.进程 进程是系统资源加上一个或多个线程的集合 进程只能在一个时间干一件事,如果想同时干两件事或多件事,进程就无能为力了. 进程在执行的过程中如果阻塞,例如等待输入,整个进程就会挂起 ...
- Ansiable批量管理工具
1.ansible 3W1H 1.1 ansible介绍 ssh秘钥认证+脚本批量管理,特点:简单.实用 但是看起来比较low,需要人工写脚本,类似实时复制的inotify工具. 2013以前这种方式 ...
- 集群批量管理工具parallel ssh的安装及使用
集群批量管理工具parallel ssh的安装及使用 最近为了做实验,需要进行集群的配置,虽然十个节点的集群不算多,但是还是用它来减轻负担.但在使用的过程中,发现网上虽然有资料,但大多都没能很好的解决 ...
- 华为服务器批量系统软件,华为云ECS批量管理工具
华为云ECS批量管理工具是一款高效实用云服务管理工具,能够帮助用户节省重复的操作,批量对华为云服务器进行操作,节省用户频繁的人工操作,工具还集合了自定义模板批量创建.批量释放.批量提取服务器的IP等功 ...
- 大规模的服务器如何管理--批量管理工具
作为服务器运维人员都知道,日常检查和处理服务器问题几乎占据了所有时间,检查服务器的繁琐也只有他们自己能体会,这时候,要是能有个工具能帮助他们,就如雪中送炭啊.刚刚好,市面上确实出来了这么几款管理工具, ...
- Linux服务器批量管理工具 - TeamRemote
产生背景: 当前网上流行的一些优秀且功能强大的工具,如puppet,dsh,parallel-ssh,ansible等.但不得不说,他们的上手起来太复杂了,导致不得不学习他们的命令以及复杂的用法,且对 ...
- pip Python 包安装和管理工具
pip 是一个 Python 包安装与管理工具. 从PyPI安装软件包: $ pip install SomePackage [...] Successfully installed SomePack ...
- [Winform]一个简单的账户管理工具
最近一直觉得注册的账户越来越多,帐号密码神马的容易弄混.自己就折腾了一个简单的账户管理工具,其实实现也挺简单,将每个账户的密码及相关密码提示信息,经aes算法加密之后保存到数据库,当前登录用户可以查询 ...
- SilkierQuartz 1.0.21 发布, 是一个 Quartz.NET 的强大且简单的Web管理工具和承载组件...
SilkierQuartz 是一个新的合并了 Quartzmin 和 QuartzHostedService的组件! Quartz.NET 是一个完整的开源的任务规划系统,从小应用至大型企业级应用都可 ...
最新文章
- 王振的开发板_Android
- 面试题05-UI控件
- 新闻发布项目——业务逻辑层(commentService)
- Java 动态代理与class字节码动态修改技术
- Xformode的坑
- android中常用正则表达式
- 读书笔记 计算机系统--系统架构与操作系统的高度集成 第一章概叙
- Oracle 11g R2 软件下载网址收藏
- cpda项目数据分析师与cda数据分析师的区别?不建议考CPDA
- 记一次阿里巴巴电话面试题
- Android 游戏 - 聚合SDK
- 【Markdown Pad 2常见问题3】Markdown Pad 2插入本土图片无法显示
- Android课题研究的主要观点,二、本课题的研究目标、研究内容、主要观点和创新之处.doc...
- 寒假回归篇——C语言学习感悟2022.1.16
- MySQL与Oracle主键Query性能测试结果
- 全球与中国强化采油表面活性剂市场深度研究分析报告
- 西工大计算机学院博士考试,【经验指导】西北工业大学2019年博士研究生报考指南及考博注意事...
- 关于 [CSP-S 2022] 假期计划 的一些想法
- ACL扩展IP访问控制列表配置
- xamarin和mysql_Xamarin 中的数据库