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 ...
随机推荐
- BZOJ2981 : [Poi2002]括号
对于最终加入了括号的序列,对其求中缀表达式,建树. 可以发现$n-1$个运算符DFS序递增,且若一个-上方往左走了奇数次,则它就是+,否则就是-. 所以考虑DP,设$f[i][j]$表示考虑了前$i$ ...
- BZOJ3566 : [SHOI2014]概率充电器
选个根把无根树转化成有根树, 设f[i]表示i不通电的概率 则 答案为对于枚举树根root进行DP后1-f[root]的和 直接算是O(n^2)的,但是n有500000,所以不能过. 对于这样一棵以1 ...
- Hadoop IPC的代码结构分析
与IPC相关的代码在org.apache.hadoop.ipc包下.共七个文件,其中4个辅助类: RemoteException Status VersionedProtocol Connection ...
- webpack入门教程
注:本文内容比较基础,供初学者快速入门参考. 更多详细信息请参考官方文档. 本文同步发布于我的博客,欢迎关注^_^ 1. 安装 npm install -g webpack 2. 基本使用 假设项目文 ...
- Android 开源项目
StickerCamera 一个完整的开源项目.贴纸标签相机(类似nice,in),拍照,裁剪,贴贴纸打标签功能. MD-BiliBili 基于 Material Design 的 BiliBili ...
- ACM: 继续畅通工程-并查集-最小生成树-解题报告
继续畅通工程 Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u Submit Status Descri ...
- mvc2 To 4
asp.net mvc2新特性:1.区域,有利于分模块开发 2.数据注解和验证 3.View层强类型辅助方法 4.UI Templates 5.httppost,默认参数asp.net mvc3新特性 ...
- vs2013的单元测试 第一部分
这次的vs2013的单元测试我学到了许多,虽然到现在我还是不能完成,但是我也学到了许多. 首先,在vs2013中先安装Unit Test Generator,如图所示: 这个是进行单元测试重要的一个插 ...
- highcharts 时间少8小时问题
Highcharts 中默认开启了UTC(世界标准时间),由于中国所在时区为+8,所以经过 Highcharts 的处理后会减去8个小时. 如果不想使用 UTC,有2种方法可供使用: 1.在使用Hig ...
- 索引器、哈希表Hashtabl、字典Dictionary(转)
一.索引器 索引器类似于属性,不同之处在于它们的get访问器采用参数.要声明类或结构上的索引器,使用this关键字. 示例: 索引器示例代码 /// <summary> /// 存储星 ...