Python开发程序:简单主机批量管理工具
题目:简单主机批量管理工具
需求:
- 主机分组
- 登录后显示主机分组,选择分组后查看主机列表
- 可批量执行命令、发送文件,结果实时返回
- 主机用户名密码可以不同
流程图:

说明:
### 作者介绍:
* author:lzl
### 博客地址:
* http://www.cnblogs.com/lianzhilei/p/5881434.html ### 功能实现
题目:简单主机批量管理工具 需求:
主机分组
登录后显示主机分组,选择分组后查看主机列表
可批量执行命令、发送文件,结果实时返回
主机用户名密码可以不同 ### 目录结构:
Host-Manage
│
├── ftpclient #客户端程序
├── README.txt
├── management.py #服务端入口程序
├── database #数据库
├── test.py #修改数据库 ### 注释
可批量执行命令、发送文件
上传命令格式: put database /tmp/db ### 运行环境
windows系统
python3.0+
README
主程序:
#!/usr/bin/env python
# -*- coding:utf-8 -*-
#-Author-Lian import json
import paramiko
import threading class Remotehost(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 command(self):
#获取命令
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) # 允许连接不在know_hosts文件中的主机
ssh.connect(hostname=self.host, port=self.port, username=self.username, password=self.password) # 连接服务器
stdin, stdout, stderr = ssh.exec_command(self.cmd) # 获取命令结果
res ,err = stdout.read(),stderr.read() # 三元运算
result = res if res else err
print("[%s]".center(50,"-")%self.host)
print(result.decode()) # 打印输出
ssh.close() def put(self):
#上传
try:
transport = paramiko.Transport((self.host, self.port))
transport.connect(username=self.username, password=self.password)
sftp = paramiko.SFTPClient.from_transport(transport)
sftp.put(self.cmd.split()[1], self.cmd.split()[2]) # 上传文件
transport.close()
print("\033[32;0m【%s】 上传 文件【%s】 成功....\033[0m"%(self.host,self.cmd.split()[2]))
except Exception as error: # 抓住异常
print("\033[31;0m错误:【%s】【%s】\033[0m"%(self.host,error)) def run(self):
#反射
cmd_str = self.cmd.split()[0]
if hasattr(self,cmd_str):
getattr(self,cmd_str)()
else:
setattr(self,cmd_str,self.command)
getattr(self,cmd_str)() if __name__ == "__main__":
#主程序
with open("database","r") as file:
data_dict = json.loads(file.read()) #获取数据库信息
for k in data_dict: #打印地址组
print(k) group_choice = input("输入要操作的组名:").strip()
if data_dict.get(group_choice):
host_dict = data_dict[group_choice] #定义主机字典
for k in host_dict: #打印所选地址组所有的主机名
print(k)
while True:
cmd = input("选择进行的操作的命令:").strip()
thread_list=[]
if cmd: #命令不为空
for k in host_dict:
host, port, username, password=k,host_dict[k]["port"],host_dict[k]["username"],host_dict[k]["password"]
func = Remotehost(host,port,username,password,cmd) #实例化类
t = threading.Thread(target=func.run) #创建线程
t.start()
thread_list.append(t)
for t in thread_list:
t.join() #等待线程执行结果
else:
print("\033[31;0m操作组不存在\033[0m")
数据库:
{"group1": {"192.168.20.217": {"password": "", "username": "root", "port": 22}, "192.168.20.219": {"password": "zyw@123", "username": "root", "port": 22}}, "group2": {"192.168.20.217": {"password": "", "username": "root", "port": 22}}}
database
Python开发程序:简单主机批量管理工具的更多相关文章
- Python简单主机批量管理工具
一.程序介绍 需求: 简单主机批量管理工具 需求: 1.主机分组 2.主机信息使用配置文件 3.可批量执行命令.发送文件,结果实时返回 4.主机用户名密码.端口可以不同 5.执行远程命令使用param ...
- 简单主机批量管理工具(这里实现了paramiko 用su切换到root用户)
项目名:简单主机批量管理工具 一.需求 1.主机分组 2.可批量执行命令.发送文件,结果实时返回,执行格式如下 batch_run -h h1,h2,h3 -g web_clusters,db_ ...
- python之简单主机批量管理工具
今天做了一个很简单的小项目,感受到paramiko模块的强大. 一.需求 二.简单需求分析及流程图 需求很少,我就简单地说下: 1. 主机分组可以配置文件实现(我用字典存数据的). 2. 登陆功能不做 ...
- python 简单主机批量管理工具
需求: 主机分组 主机信息配置文件用configparser解析 可批量执行命令.发送文件,结果实时返回,执行格式如下 batch_run -h h1,h2,h3 -g web_cluster ...
- 【Python之旅】第六篇(七):开发简易主机批量管理工具
[Python之旅]第六篇(七):开发简易主机批量管理工具 python 软件开发 Paramiko模块 批量主机管理 摘要: 通过前面对Paramiko模块的学习与使用,以及Python中多线程与多 ...
- python数据库操作对主机批量管理
import paramiko import MySQLdb conn = MySQLdb.connect(host=',db='host') cur = conn.cursor(cursorclas ...
- python开发必备神器 Virtualenv及管理工具Virtualenvwrapper
如果在一台机器上,想开发多个不同的项目,需要用到同一个包的不同版本,如果还在本地继续安装,在同一个目录下安装或者更新,其它的项目必须就无法运行了,怎么办呢? 解决方案:虚拟环境 虚拟环境可以搭建独立的 ...
- Linux系统——Ansible批量管理工具
批量管理工具: (1)ansible 操作简单(适用于500台以下服务器) (2)saltstack 比较复杂(一般适用于1000-4w台服务器) (3)puppet超级复杂 systemctl(统一 ...
- windows下运行的linux服务器批量管理工具(带UI界面)
产生背景: 由于做服务器运维方面的工作,需要一人对近千台LINUX服务器进行统一集中的管理,如同时批量对LINUX服务器执行相关的指令.同时批量对LINUX服务器upload程序包.同时批量对LINU ...
随机推荐
- storm源码之storm代码结构【译】【转】
[原]storm源码之storm代码结构[译] 说明:本文翻译自Storm在GitHub上的官方Wiki中提供的Storm代码结构描述一节Structure of the codebase,希望对正 ...
- 基于Theano的DL的开源小框架:Dragon
Link:https://github.com/neopenx/Dragon 起因 最近看了Hinton的Dropout,发现原来的乱代码只能在Softmax层前面加Dropout.索性把整个Thea ...
- [Leetcode] Word BreakII
Question: Given a string s and a dictionary of words dict, add spaces in s to construct a sentence w ...
- 让 Web 站点崩溃最常见的七大原因
磁盘已满 导致系统无法正常运行的最可能的原因是磁盘已满.一个好的网络管理员会密切关注磁盘的使用情况,隔一定的时间,就需要将磁盘上的一些负载转存到备份存储介质中(例如磁带). 日志文件会很快用光所有 ...
- zip ubuntu使用
http://www.cnblogs.com/daizhuacai/p/3174885.html 安装: sudo apt-get install zip 解压: unzip -d path file ...
- IOS开发常用设计模式
IOS开发常用设计模式 说起设计模式,感觉自己把握不了笔头,所以单拿出iOS开发中的几种常用设计模式谈一下. 单例模式(Singleton) 概念:整个应用或系统只能有该类的一个实例 在iOS开发我们 ...
- 20145330Java程序设计第三次实验
20145330<Java程序设计>第三次实验报告 实验三 敏捷开发与XP实践 实验内容 1.使用git上传代码 2.使用git实现代码开发实践 3.实现代码的重载 实验步骤 使用git上 ...
- MySql_设置编码
1.查看mysql编码(默认latin1) show variables like 'collation_%'; +--------------------------+--------------- ...
- JAVA创建并写入内容到xlsx文件
首先需要在web项目中导入jxl.jar 包 //action中代码 public String downloadReport(){ String path = System.getPr ...
- jq图片点击居中放大原始图片兼容ie
/* *鍥剧墖澶у浘鏄剧ず */ function imgshow(){ content_div:"";//内容 bg_div:"";//背景变暗 img_di ...