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简单主机批量管理工具相关推荐

  1. day9 进程 线程 threading multiprocessing 队列 主机批量管理工具

    一.进程与线程 1.进程 进程是系统资源加上一个或多个线程的集合 进程只能在一个时间干一件事,如果想同时干两件事或多件事,进程就无能为力了. 进程在执行的过程中如果阻塞,例如等待输入,整个进程就会挂起 ...

  2. Ansiable批量管理工具

    1.ansible 3W1H 1.1 ansible介绍 ssh秘钥认证+脚本批量管理,特点:简单.实用 但是看起来比较low,需要人工写脚本,类似实时复制的inotify工具. 2013以前这种方式 ...

  3. 集群批量管理工具parallel ssh的安装及使用

    集群批量管理工具parallel ssh的安装及使用 最近为了做实验,需要进行集群的配置,虽然十个节点的集群不算多,但是还是用它来减轻负担.但在使用的过程中,发现网上虽然有资料,但大多都没能很好的解决 ...

  4. 华为服务器批量系统软件,华为云ECS批量管理工具

    华为云ECS批量管理工具是一款高效实用云服务管理工具,能够帮助用户节省重复的操作,批量对华为云服务器进行操作,节省用户频繁的人工操作,工具还集合了自定义模板批量创建.批量释放.批量提取服务器的IP等功 ...

  5. 大规模的服务器如何管理--批量管理工具

    作为服务器运维人员都知道,日常检查和处理服务器问题几乎占据了所有时间,检查服务器的繁琐也只有他们自己能体会,这时候,要是能有个工具能帮助他们,就如雪中送炭啊.刚刚好,市面上确实出来了这么几款管理工具, ...

  6. Linux服务器批量管理工具 - TeamRemote

    产生背景: 当前网上流行的一些优秀且功能强大的工具,如puppet,dsh,parallel-ssh,ansible等.但不得不说,他们的上手起来太复杂了,导致不得不学习他们的命令以及复杂的用法,且对 ...

  7. pip Python 包安装和管理工具

    pip 是一个 Python 包安装与管理工具. 从PyPI安装软件包: $ pip install SomePackage [...] Successfully installed SomePack ...

  8. [Winform]一个简单的账户管理工具

    最近一直觉得注册的账户越来越多,帐号密码神马的容易弄混.自己就折腾了一个简单的账户管理工具,其实实现也挺简单,将每个账户的密码及相关密码提示信息,经aes算法加密之后保存到数据库,当前登录用户可以查询 ...

  9. SilkierQuartz 1.0.21 发布, 是一个 Quartz.NET 的强大且简单的Web管理工具和承载组件...

    SilkierQuartz 是一个新的合并了 Quartzmin 和 QuartzHostedService的组件! Quartz.NET 是一个完整的开源的任务规划系统,从小应用至大型企业级应用都可 ...

最新文章

  1. 王振的开发板_Android
  2. 面试题05-UI控件
  3. 新闻发布项目——业务逻辑层(commentService)
  4. Java 动态代理与class字节码动态修改技术
  5. Xformode的坑
  6. android中常用正则表达式
  7. 读书笔记 计算机系统--系统架构与操作系统的高度集成 第一章概叙
  8. Oracle 11g R2 软件下载网址收藏
  9. cpda项目数据分析师与cda数据分析师的区别?不建议考CPDA
  10. 记一次阿里巴巴电话面试题
  11. Android 游戏 - 聚合SDK
  12. 【Markdown Pad 2常见问题3】Markdown Pad 2插入本土图片无法显示
  13. Android课题研究的主要观点,二、本课题的研究目标、研究内容、主要观点和创新之处.doc...
  14. 寒假回归篇——C语言学习感悟2022.1.16
  15. MySQL与Oracle主键Query性能测试结果
  16. 全球与中国强化采油表面活性剂市场深度研究分析报告
  17. 西工大计算机学院博士考试,【经验指导】西北工业大学2019年博士研究生报考指南及考博注意事...
  18. 关于 [CSP-S 2022] 假期计划 的一些想法
  19. ACL扩展IP访问控制列表配置
  20. xamarin和mysql_Xamarin 中的数据库

热门文章

  1. VS+VA 开发NDK
  2. Web开发者必备的12款超赞jQuery插件
  3. vs开发人员命令查看C++类 data member 内存布局
  4. pycharm 基本设置
  5. 在不是Thread类的子类中,如何获取线程对象的名称呢?
  6. iOS linker command failed with exit code 1 (use v to see invocation)
  7. 如何编写和应用Java的自定义异常类
  8. 基于nginx和uWSGI在Ubuntu系统上部署Django项目
  9. Android图片资源获取原则
  10. 当前主流、最新网络技术回眸(二)