需求:

  1. 主机分组
  2. 登录后显示主机分组,选择分组后查看主机列表
  3. 可批量执行命令、发送文件,结果实时返回
  4. 主机用户名密码可以不同

流程图:

说明:

## 需求: 
  1. 主机分组
  2. 登录后显示主机分组,选择分组后查看主机列表
  3. 可批量执行命令、发送文件,结果实时返回
  4. 主机用户名密码可以不同
## 目录结构
  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 ] 练习:批量管理主机工具的更多相关文章

  1. 【Python】JBOSS-JMX-EJB-InvokerServlet批量检测工具

    一.说明 在JBoss服务器上部署web应用程序,有很多不同的方式,诸如:JMX Console.Remote Method Invocation(RMI).JMXInvokerServlet.Htt ...

  2. Python简单主机批量管理工具

    一.程序介绍 需求: 简单主机批量管理工具 需求: 1.主机分组 2.主机信息使用配置文件 3.可批量执行命令.发送文件,结果实时返回 4.主机用户名密码.端口可以不同 5.执行远程命令使用param ...

  3. python 简单主机批量管理工具

    需求: 主机分组 主机信息配置文件用configparser解析 可批量执行命令.发送文件,结果实时返回,执行格式如下  batch_run  -h h1,h2,h3   -g web_cluster ...

  4. 【Python之旅】第六篇(七):开发简易主机批量管理工具

    [Python之旅]第六篇(七):开发简易主机批量管理工具 python 软件开发 Paramiko模块 批量主机管理 摘要: 通过前面对Paramiko模块的学习与使用,以及Python中多线程与多 ...

  5. python运维之使用python进行批量管理主机

    1. python运维之paramiko 2. FABRIC 一个与多台服务器远程交互的PYTHON库和工具 3. SSH连接与自动化部署工具paramiko与Fabric 4. Python批量管理 ...

  6. Python开发程序:简单主机批量管理工具

    题目:简单主机批量管理工具 需求: 主机分组 登录后显示主机分组,选择分组后查看主机列表 可批量执行命令.发送文件,结果实时返回 主机用户名密码可以不同 流程图: 说明: ### 作者介绍: * au ...

  7. MySQL通用批量写入工具(Python)

    背景   平台目前的分析任务主要以Hive为主,分析后的结果存储在HDFS,用户通过REST API或者Rsync的方式获取分析结果,这样的方式带来以下几个问题:   (1)任务执行结束时间未知,用户 ...

  8. Linux系统——Ansible批量管理工具

    批量管理工具: (1)ansible 操作简单(适用于500台以下服务器) (2)saltstack 比较复杂(一般适用于1000-4w台服务器) (3)puppet超级复杂 systemctl(统一 ...

  9. 简单主机批量管理工具(这里实现了paramiko 用su切换到root用户)

    项目名:简单主机批量管理工具 一.需求 1.主机分组 2.可批量执行命令.发送文件,结果实时返回,执行格式如下 batch_run  -h h1,h2,h3   -g web_clusters,db_ ...

随机推荐

  1. [Node] Agenda 中文文档 定时任务调度系统[基础篇]

    Agenda简介 使用步骤概述 步骤详述 初始化 定义任务 参数说明: 配置任务 参数说明 设置监听 注意事项 Agenda简介 Agenda是一个定时任务管理模块,它将node中的定时任务存储在数据 ...

  2. debian8.2安装kubernetes

    master上通过kubeadm安装Kubernetes 添加国内阿里源后安装kubeadm: deb https://mirrors.aliyun.com/kubernetes/apt/ kuber ...

  3. NOIP 2009 靶形数独(DLX)

    小城和小华都是热爱数学的好学生,最近,他们不约而同地迷上了数独游戏,好胜的他们想用数独来一比高低.但普通的数独对他们来说都过于简单了,于是他们向Z 博士请教,Z 博士拿出了他最近发明的“靶形数独”,作 ...

  4. 【Python】Python内置函数dir详解

    1.命令介绍 最近学习并使用了一个python的内置函数dir,首先help一下: 复制代码代码如下: >>> help(dir)Help on built-in function ...

  5. Mac下离线安装SDK

    背景 之前电脑上使用的是Android Studio,其sdk在Libarey下,最近需要在Eclipse下继续做之前的安卓项目,在配置sdk时eclipse自动选择了之前Android Studio ...

  6. js调用本地office打开服务器的office文件预览

    本来是想做成直接在网页上在线预览office文件的,但是找了好多,要不是收费,要不就是要调用别人的API不安全,所以纠结了好久还是用调用本地的office预览office文件. 废话不多说,那么怎么调 ...

  7. Delphi 之 编辑框控件(TEdit)

    TEdit 组件主要用于数据的输入和显示和编辑等操作. AutoSelect 获取组件焦点.该属性只能在单行文本组件使用.值为True为选中.false则不选中. BorderStyle 设置编辑框控 ...

  8. JDK的弃儿:Vector、Stack、Hashtable、Enumeration

    随着JDK的发展,一些设计缺陷或者性能不足的类库难免会被淘汰,最常见的就是Vector.Stack.HashTable和Enumeration了. Vector(@since 1.0) 首先看看Vec ...

  9. CSS clear both清除浮动总结

    我们知道有时候使用了CSS float浮动,会产生CSS浮动,这个时候就需要清理浮动,我们就用clear样式属性即可实现. 接下来我们来认识与学习CSS clear知识与用法. clear清除浮动目录 ...

  10. 02.Java面向对象问题

    目录介绍 2.0.0.1 重载和重写的区别?重载和重写绑定机制有何区别?父类的静态方法能否被子类重写? 2.0.0.2 封装.继承.多态分别是什么? 2.0.0.3 接口和抽象类的区别是什么?接口的意 ...