网络编程与并发-批量主机管理工具开发
来源:互联网 发布:索尼相机软件下载 编辑:程序博客网 时间:2024/09/21 09:03
批量主机管理工具开发
要求
1. 实现批量命令执行、文件分发
core.py
#!/usr/bin/env python# _*_ coding:utf-8 _*___author__ = "Elijah"__date__ = "2017/10/8 13:56"import syssys.path.append('../conf')import settingsimport paramikofrom multiprocessing import Processclass operation_client(object): # 远程操作主机 def __init__(self, host, port, username, password, cmd): self.host = host self.port = port self.username = username self.password = password self.cmd = cmd def run(self): ''' 起线程连接远程主机后调用 :return: ''' cmd_str = self.cmd.split()[0] if hasattr(self, cmd_str): # 反射 eg:调用upload方法 getattr(self, cmd_str)() else: # setattr(x,'y',v)is equivalent to ``x.y=v'' setattr(self, cmd_str, self.command) getattr(self, cmd_str)() # 调用command方法,执行批量命令处理 def command(self): """批量命令处理""" ssh = paramiko.SSHClient() # 创建ssh对象 # 允许连接不在know_hosts文件中的主机 ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) ssh.connect(hostname=self.host, port=self.port, username=self.username, password=self.password) stdin, stdout, stderr = ssh.exec_command(self.cmd) result = stdout.read() print("%s".center(30, "-") % self.host) print(result.decode()) ssh.close() def upload(self): """上传文件""" filename = self.cmd.split()[1] # 要上传的文件 transport = paramiko.Transport((self.host, self.port)) transport.connect(username=self.username, password=self.password) sftp = paramiko.SFTPClient.from_transport(transport) sftp.put(filename, filename.split('\\')[-1]) print('上传文件:' + str(filename) + ' 成功!') transport.close()def show_host_list(): """通过选择分组显示主机名与IP""" num_list = [] for index, key in enumerate(settings.msg_dic): num_list.append(key) print('主机组编号:' + str(index + 1), '\n\t\t主机组名:' + str(key), '\n\t\t主机数量:' + str(len(settings.msg_dic[key]))) while True: choose_host_list = input("请输入批量操作的主机组编号(或者输入q退出):>>>").strip() if choose_host_list.lower() == 'q': break host_dic = settings.msg_dic.get(num_list[int(choose_host_list) - 1]) if host_dic: for key in host_dic: print(key, host_dic[key]["IP"]) return host_dic else: print("对不起!您输入的主机组编号有误!\n") continuedef interactive(host_dic): ''' 根据选择的分组主机多线程批量操作 :param host_dic: :return: ''' str_info = '''批量主机管理工具功能说明:1、批量文件上传:upload file_path例如:upload C:\\Users\\YG\\Desktop\\file.txt 2、批量操作主机:df -h 、ls 、pwd ......''' print(str_info) thread_list = [] while True: command = input("请输入操作命令(或者输入q退出):>>>").strip() if command.lower() == 'q': print('感谢使用批量主机管理工具!再见!') break elif command: for key in host_dic: host, port, username, password = host_dic[key]["IP"], host_dic[key]["port"], host_dic[key]["username"], \ host_dic[key]["password"] func = operation_client(host, port, username, password, command) # 实例化类 t = Process(target=func.run) # 起线程 t.start() thread_list.append(t) for t in thread_list: t.join() # 主线程等待子线程执行完毕 else: continuedef run(): host_dic = show_host_list() interactive(host_dic)
settings.py
#!/usr/bin/env python# _*_ coding:utf-8 _*___author__ = "Elijah"__date__ = "2017/10/8 13:57"msg_dic = { "group1": { "client_1": {"IP": "192.168.1.2", "username": "root", "password": "root", "port": 22}, }, "group2": { "client_1": {"IP": "192.168.1.3", "username": "root", "password": "root", "port": 22}, "client_2": {"IP": "192.168.1.4", "username": "root", "password": "root", "port": 22}, }, }
main.py
#!/usr/bin/env python#_*_ coding:utf-8 _*___author__ = "Elijah"__date__ = "2017/10/8 13:57"import syssys.path.append('../src')import coreif __name__ == "__main__": core.run()
阅读全文
0 0
- 网络编程与并发-批量主机管理工具开发
- 网络编程与并发-FTP开发
- python之简单主机批量管理工具
- python之简单主机批量管理工具
- python之简单主机批量管理工具
- python之简单主机批量管理工具
- python之简单主机批量管理工具
- 使用Python实现简单主机批量管理工具
- 网络编程中的主机字节序与网络字节序
- linux下网络编程(网络字节与主机字节)
- 网络编程中的主机字节序与网络字节序
- 网络编程中的网络字节序与主机字节序
- 网络编程与并发-线程、进程、协程
- 网络编程与并发-IO模型
- 主机(HOST)并发程序开发
- 网络编程之获取主机名称与IP地址
- 主机网络ping通开发板与虚拟机问题
- 开发板与主机NFS网络文件系统搭建
- 简单的Hibernate搭建
- 自己动手写reg注册表文件--thanklife整理后
- 群赛18----2017.10.9
- 在JAVA中如何跳出当前的多重嵌套循环
- php 验证码实现
- 网络编程与并发-批量主机管理工具开发
- 236. Lowest Common Ancestor of a Binary Tree
- Hibernate个人总结3
- 分布式系统以及网络监视系统zabbix3.4.2版本配置图文续
- 安卓实现一键退出应用
- 递归模拟演示--栈--《数据结构与算法》
- win10 FTP搭建全过程
- Java Servlet完全教程
- 机器学习中的相似性度量