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

需求:

  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+

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开发程序:简单主机批量管理工具的更多相关文章

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

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

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

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

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

    今天做了一个很简单的小项目,感受到paramiko模块的强大. 一.需求 二.简单需求分析及流程图 需求很少,我就简单地说下: 1. 主机分组可以配置文件实现(我用字典存数据的). 2. 登陆功能不做 ...

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

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

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

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

  6. python数据库操作对主机批量管理

    import paramiko import MySQLdb conn = MySQLdb.connect(host=',db='host') cur = conn.cursor(cursorclas ...

  7. python开发必备神器 Virtualenv及管理工具Virtualenvwrapper

    如果在一台机器上,想开发多个不同的项目,需要用到同一个包的不同版本,如果还在本地继续安装,在同一个目录下安装或者更新,其它的项目必须就无法运行了,怎么办呢? 解决方案:虚拟环境 虚拟环境可以搭建独立的 ...

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

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

  9. windows下运行的linux服务器批量管理工具(带UI界面)

    产生背景: 由于做服务器运维方面的工作,需要一人对近千台LINUX服务器进行统一集中的管理,如同时批量对LINUX服务器执行相关的指令.同时批量对LINUX服务器upload程序包.同时批量对LINU ...

随机推荐

  1. BZOJ3072 : [Pa2012]Two Cakes

    考虑DP,设$f[i][j]$表示考虑了$a[1..i]$和$b[1..j]$的最小代价. 若$a[i]==b[j]$,则$f[i][j]=\min(f[i-1][j],f[i][j-1])+1$. ...

  2. CNN训练Cifar-10技巧

    关于数据集 Cifar-10是由Hinton的两个大弟子Alex Krizhevsky.Ilya Sutskever收集的一个用于普适物体识别的数据集.Cifar是加拿大政府牵头投资的一个先进科学项目 ...

  3. HDU 1576 (乘法逆元)

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1576 题目大意:求(A/B)mod 9973.但是给出的A是mod形式n,n=A%9973. 解题思 ...

  4. ACM Haffman编码

    Haffman编码 时间限制:1000 ms  |  内存限制:65535 KB 难度:3   描述 哈弗曼编码大家一定很熟悉吧(不熟悉也没关系,自己查去...).现在给你一串字符以及它们所对应的权值 ...

  5. 【HDU】2138 How many prime numbers

    http://acm.hdu.edu.cn/showproblem.php?pid=2138 题意:给n个数判断有几个素数.(每个数<=2^32) #include <cstdio> ...

  6. ZOJ 3703 Happy Programming Contest(DP)

    题目链接 输出路径,搞了一个DFS出来,主要是这里,浪费了好长时间. #include <cstdio> #include <string> #include <cstr ...

  7. 【JavaService】部署Java jar为Windows后台服务

    将Java jar文件部署为Windows后台服务有多种方法:Service Installer.Java service Wrapper.JavaService.exe等等.这里介绍下使用JavaS ...

  8. 对JS原型的一些理解

    一.首先给出一道经典的原型题目: var F = function(){}; Object.prototype.a = function(){}; Function.prototype.b = fun ...

  9. jQuery对象和Dom对象

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  10. *HDU3496 背包DP

    Watch The Movie Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 65535/65535 K (Java/Others)T ...