[ Python - 10 ] 练习:批量管理主机工具
需求:
- 主机分组
- 登录后显示主机分组,选择分组后查看主机列表
- 可批量执行命令、发送文件,结果实时返回
- 主机用户名密码可以不同
流程图:
说明:
## 需求:
- 主机分组
- 登录后显示主机分组,选择分组后查看主机列表
- 可批量执行命令、发送文件,结果实时返回
- 主机用户名密码可以不同
## 目录结构
batch-manage
bin/
start.py # 启动主程序
conf/
setting.py # 远程主机配置文件
core/
control.py # RemoteControl类,用于远程主机执行命令及上传
local.py # 本地数据处理 ## 说明
目前实现可批量执行命令,上传文件功能。 ## 运行环境
windows
python3.0+ 代码下载地址:https://github.com/hukeyy/batch-manage
bin/
start.py
#!_*_coding:utf-8_*_
# Author: hkey
import threading, os, sys
base_dir = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
sys.path.append(base_dir)
from core import control
from core import local
from conf import setting if __name__ == '__main__': for host in setting.hosts.keys():
host_tuple = local.options()
print('\33[42;1m[put file or inter system command.]\33[0m')
while True:
cmd = input('>>>').strip()
if len(cmd) == 0: continue
t_list = []
for host in host_tuple:
remote_control = control.RemoteControl(cmd, *host)
t = threading.Thread(target=remote_control.run,)
t.setDaemon(True)
t.start()
t_list.append(t)
for t in t_list:
t.join()
conf/
setting.py
#!_*_coding:utf-8_*_
# Author: hkey
## 元组在python中是不可变对象,保存序列时,应当尽量采用这种方式
hosts = {'测试系统':(('10.0.0.11', 22, 'root', ''),
('10.0.0.12', 22, 'root', ''),
), '生产系统':(('10.0.0.12', 22, 'root', ''),
),
}
core/
control.py
#!_*_coding:utf-8_*_
# Author: hkey
import paramiko class RemoteControl(object):
'''远程主机操作类'''
def __init__(self, cmd, *kw):
self.hostname = kw[0]
self.port = kw[1]
self.username = kw[2]
self.password = kw[3]
self.cmd = cmd def run(self):
'''通过反射功能将程序解耦'''
cmd = self.cmd.split()[0]
if hasattr(self, cmd):
getattr(self, cmd)()
else:
setattr(self, cmd, self.command)
getattr(self, cmd)() def put(self):
'''上传文件'''
# try:
transport = paramiko.Transport(self.hostname, 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('\33[32;1m【%s】上传文件【%s】成功!' %(self.hostname, self.cmd.split()[1]))
# except Exception as e:
# print('\33[31;1m错误:【%s】: 【%s】\33[0m' %(self.hostname, e)) def command(self):
'''执行系统静态命令'''
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect(hostname=self.hostname, 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('\33[32;1m%s\33[0m'.center(50, '-') % self.hostname)
print(result.decode())
ssh.close()
core/
local.py
#!_*_coding:utf-8_*_
# Author: hkey
import os, sys
base_dir = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
sys.path.append(base_dir)
from conf import setting
def options():
'''通过配置文件setting.py,用户选择主机组并通过用户选择的组获取到主机的信息'''
for host in setting.hosts.keys():
print(host)
while True:
choice = input('please choice groupname:')
if len(choice) ==0: continue
if choice in setting.hosts.keys():
for host in setting.hosts[choice]:
print(host[0])
return setting.hosts[choice]
else:
print('groupname not exist.')
break
[ Python - 10 ] 练习:批量管理主机工具的更多相关文章
- 【Python】JBOSS-JMX-EJB-InvokerServlet批量检测工具
一.说明 在JBoss服务器上部署web应用程序,有很多不同的方式,诸如:JMX Console.Remote Method Invocation(RMI).JMXInvokerServlet.Htt ...
- Python简单主机批量管理工具
一.程序介绍 需求: 简单主机批量管理工具 需求: 1.主机分组 2.主机信息使用配置文件 3.可批量执行命令.发送文件,结果实时返回 4.主机用户名密码.端口可以不同 5.执行远程命令使用param ...
- python 简单主机批量管理工具
需求: 主机分组 主机信息配置文件用configparser解析 可批量执行命令.发送文件,结果实时返回,执行格式如下 batch_run -h h1,h2,h3 -g web_cluster ...
- 【Python之旅】第六篇(七):开发简易主机批量管理工具
[Python之旅]第六篇(七):开发简易主机批量管理工具 python 软件开发 Paramiko模块 批量主机管理 摘要: 通过前面对Paramiko模块的学习与使用,以及Python中多线程与多 ...
- python运维之使用python进行批量管理主机
1. python运维之paramiko 2. FABRIC 一个与多台服务器远程交互的PYTHON库和工具 3. SSH连接与自动化部署工具paramiko与Fabric 4. Python批量管理 ...
- Python开发程序:简单主机批量管理工具
题目:简单主机批量管理工具 需求: 主机分组 登录后显示主机分组,选择分组后查看主机列表 可批量执行命令.发送文件,结果实时返回 主机用户名密码可以不同 流程图: 说明: ### 作者介绍: * au ...
- MySQL通用批量写入工具(Python)
背景 平台目前的分析任务主要以Hive为主,分析后的结果存储在HDFS,用户通过REST API或者Rsync的方式获取分析结果,这样的方式带来以下几个问题: (1)任务执行结束时间未知,用户 ...
- Linux系统——Ansible批量管理工具
批量管理工具: (1)ansible 操作简单(适用于500台以下服务器) (2)saltstack 比较复杂(一般适用于1000-4w台服务器) (3)puppet超级复杂 systemctl(统一 ...
- 简单主机批量管理工具(这里实现了paramiko 用su切换到root用户)
项目名:简单主机批量管理工具 一.需求 1.主机分组 2.可批量执行命令.发送文件,结果实时返回,执行格式如下 batch_run -h h1,h2,h3 -g web_clusters,db_ ...
随机推荐
- LeetCode 33——搜索旋转排序数组
1. 题目 2. 解答 2.1. 方法一 直接进行二分查找,在判断查找方向的时候详细分类. 当 nums[mid] < target 时, 若 nums[left] <= nums[mid ...
- 浅谈C#中show和showDialog的区别
[转载] A.WinForm中窗体显示 显示窗体可以有以下2种方法: Form.ShowDialog方法 (窗体显示为模式窗体) Form.Show方法 (窗体显示为无模式窗体) 2者具体区别如 ...
- 集显也能硬件编码:Intel SDK && 各种音视频编解码学习详解
http://blog.sina.com.cn/s/blog_4155bb1d0100soq9.html INTEL MEDIA SDK是INTEL推出的基于其内建显示核心的编解码技术,我们在播放高清 ...
- 关于for循环的理解
个人理解:for循环,顾名思义,就是在每种特定条件下,按照要求执行每个阶段,也指着在某种情况下的赋值,反反复复的根据 编程来输入.当在一些特定条件下,程序中的数值也会发生相应的改变,这就得看执行的口令 ...
- springboot ueditor 使用心得
1.将ueditor引入项目中会发现,图片不能上传,返回值意思是因配置文件错误,导致图片无法上传 默认情况是使用jsp初始配置文件,这就需要项目支持jsp解析 在maven中引入 <!--添加对 ...
- IE6,7,8支持css圆角
我们知道Webkit内核的浏览器支持-webkit-border-radius: 10px;属性(10px是圆角半径),可以直接解析出圆角;Firefox浏览器支持-moz-border-radius ...
- 左侧导航条+中间显示内容+右侧菜单配置,Bootstrap+AdminLTE+Jquery
1.最近做个导航页面,找了一大堆UI,最终选了AdminLTE,这个UI也是以bootstrap为基础,简单实用,中间内容用jquery的load加载,简单暴力,非常适合快速开发. 2.效果图如下: ...
- [CQOI2012]局部极小值
题目链接 注意到\(4\times 7\)的矩阵的局部极小值最多只有8个,可以状压. 设\(f[i][sta]\)表示从小到大填数,当前填到\(i\),极小值的填充状态为\(sta\)的方案数. 考虑 ...
- [Leetcode] Longest consecutive sequence 最长连续序列
Given an unsorted array of integers, find the length of the longest consecutive elements sequence. F ...
- http get post 参数校验
spring boot 常见http get ,post请求参数处理 在定义一个Rest接口时通常会利用GET.POST.PUT.DELETE来实现数据的增删改查:这几种方式有的需要传递参数,后台 ...