简单主机批量管理工具

题目:简单主机批量管理工具

需求:

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

流程图:

说明:

### 作者介绍:
* 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+

主程序


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

#!/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 in data_dict:                        #打印地址组

        print(k)

    group_choice = input("输入要操作的组名:").strip()

    if data_dict.get(group_choice):

        host_dict = data_dict[group_choice]     #定义主机字典

        for in host_dict:                    #打印所选地址组所有的主机名

            print(k)

        while True:

            cmd = input("选择进行的操作的命令:").strip()

            thread_list=[]

            if cmd:                                 #命令不为空

                for 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)      #实例化类

                    = threading.Thread(target=func.run)                   #创建线程

                    t.start()

                    thread_list.append(t)

                for in thread_list:

                    t.join()                                                #等待线程执行结果

    else:

        print("\033[31;0m操作组不存在\033[0m")

数据库:

{"group1": {"192.168.20.217": {"password": "123456", "username": "root", "port": 22}, "192.168.20.219": {"password": "[email protected]", "username": "root", "port": 22}}, "group2": {"192.168.20.217": {"password": "123456", "username": "root", "port": 22}}}
时间: 2024-12-23 15:17:57

简单主机批量管理工具的相关文章

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

题目:简单主机批量管理工具 需求: 主机分组 登录后显示主机分组,选择分组后查看主机列表 可批量执行命令.发送文件,结果实时返回 主机用户名密码可以不同 流程图: 说明: ### 作者介绍: * author:lzl ### 博客地址: * http://www.cnblogs.com/lianzhilei/p/5881434.html ### 功能实现 题目:简单主机批量管理工具 需求: 主机分组 登录后显示主机分组,选择分组后查看主机列表 可批量执行命令.发送文件,结果实时返回 主机用户名密

python——简单主机批量管理工具

需求: 主机分组 主机信息配置文件用configparser解析 可批量执行命令.发送文件,结果实时返回,执行格式如下  batch_run  -h h1,h2,h3   -g web_clusters,db_servers    -cmd  "df -h" batch_scp   -h h1,h2,h3   -g web_clusters,db_servers  -action put  -local test.py  -remote /tmp/ 主机用户名密码.端口可以不同 执行远

python 简单主机批量管理工具

需求: 主机分组 主机信息配置文件用configparser解析 可批量执行命令.发送文件,结果实时返回,执行格式如下  batch_run  -h h1,h2,h3   -g web_clusters,db_servers    -cmd  "df -h" batch_scp   -h h1,h2,h3   -g web_clusters,db_servers  -action put  -local test.py  -remote /tmp/ 主机用户名密码.端口可以不同 执行远

module04-2-简单主机批量管理工具

需求 1. 运行程序列出主机组或者主机列表2. 选择指定主机或主机组3. 选择让主机或者主机组执行命令或者向其传输文件(上传/下载)4. 充分使用多线程或多进程5. 不同主机的用户名密码.端口可以不同 目录结构 简单主机批量管理工具 ├ bin # 执行文件目录 | └ SBHM.py # 执行程序 ├ conf # 配置文件目录 | ├ hosts.ini # 配置文件.目前主要保存主机连接相关信息 | └ init_conf.py # 配置文件格式化程序 └ core # 程序核心代码位置

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

通过前面对Paramiko模块的学习与使用,以及Python中多线程与多进程的了解,依此,就可以开发简易的主机批量管理工具了. 显然批量管理主机时,程序如果能并发执行功能是最好的,因为这样可以最大程度地利用CPU的性能,因此这就需要使用Python多线程或者多进程,基于学习的需要,这里主要使用多进程来进行开发,当然,这会存在一定问题,后面会说. 主要内容如下: 1.主机批量管理工具功能 2.设计框架 3.实现:数据库信息与程序源代码 4.实战演示 5.程序的不足 6.在写程序过程中的经验教训 7

简单的主机批量管理

需求: 题目:简单主机批量管理工具 需求: 主机分组 主机信息配置文件用configparser解析 可批量执行命令.发送文件,结果实时返回,执行格式如下  batch_run  -h h1,h2,h3   -g web_clusters,db_servers    -cmd  "df -h" batch_scp   -h h1,h2,h3   -g web_clusters,db_servers  -action put  -local test.py  -remote /tmp/

批量管理工具,TriAquae!比较简单

首先,triaquae是基于ssh 的方式来对主机进行批量管理的,安装triaquae这边可以是图形,也可以不是图形! 然后triaquae访问必须要图形界面的支持!traquae是用python语言编写的,实现在大量主机推送文件,执行命令的一个过程! triaquae添加主机什么的也是比较方便的,因为是基于web的图形界面吗!比较简单!triaquae整体来讲操作命令的什么给回执的时间也不算 慢! 但是可能服务器太大量的话就不太合适了! 因为毕竟是基于ssh的! 如果服务器量太大的话,就根据需

使用Python 实现多主机简单的批量管理

1,当前操作系统环境 2,安装python所使用到的模块,使用pip命令安装yum -y install gcc#安装pycrypto wget http://ftp.dlitz.net/pub/dlitz/crypto/pycrypto/pycrypto-2.6.tar.gz tar -xf pycrypto-2.6.tar.gz cd pycrypto-2.6/ python setup.py build && python setup.py install #测试,注意大小写 pyt

python实现主机批量管理

在日常的运维工作中批量对主机的是很常见的,市面上也有许多主机批量管理的软件,但有时候这些软件并不能完全的满足我们的需求.python中刚好提供了关于主机批量管理的模块,今天就让我们来看看如何利用python实现主机批量管理 python提供主机批量管理的模块主要有三个paramiko.fabric与pexpect,今天我们主要说的是paramiko模块,paramiko模块是第三方模块 安装:pip install paramiko或者yum install python-paramiko如果都