网络编程与并发-批量主机管理工具开发
2017-10-09 13:58
429 查看
批量主机管理工具开发
要求
1. 实现批量命令执行、文件分发
core.py
#!/usr/bin/env python # _*_ coding:utf-8 _*_ __author__ = "Elijah" __date__ = "2017/10/8 13:56" import sys sys.path.append('../conf') import settings import paramiko from multiprocessing import Process class 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( d878 '上传文件:' + 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") continue def 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: continue def 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 sys sys.path.append('../src') import core if __name__ == "__main__": core.run()
相关文章推荐
- 【Python之旅】第六篇(七):开发简易主机批量管理工具
- 用Python开发主机批量管理工具
- linux学习笔记4:linux的任务调度,进程管理,mysql的安装和使用,ssh工具的使用,linux网络编程
- [python] 简单主机批量管理工具(多进程模式)
- JAVA基础 day25 网络编程 IP类 UDP,TCP传输学习 简易聊天工具 TCP并发学习
- python之简单主机批量管理工具
- QT---基于WinPcap的局域网络管理工具(主机扫描、包过滤、ARP攻击、端口扫描)
- python之简单主机批量管理工具
- Linux常用网络工具:批量主机服务扫描之nmap
- 详解python之简单主机批量管理工具
- python之简单主机批量管理工具
- [ Python - 10 ] 练习:批量管理主机工具
- Visual C# 2008+SQL Server 2005 数据库与网络开发--4.1.3 SQL Server 2005数据库管理工具
- Linux常用网络工具:批量主机服务扫描之nmap
- Linux常用网络工具:批量主机服务扫描之netcat
- python之简单主机批量管理工具
- python之简单主机批量管理工具
- python之简单主机批量管理工具
- 网络编程与并发-FTP开发
- 使用Python实现简单主机批量管理工具