一、程序介绍

需求:

简单主机批量管理工具

需求:
1.主机分组
2.主机信息使用配置文件
3.可批量执行命令、发送文件,结果实时返回
4.主机用户名密码、端口可以不同
5.执行远程命令使用paramiko模块

程序结构:

Host_manage/ #程序目录
├── bin #启动程序目录
│   └── start.py #启动程序文件
├── conf #配置目录
│   ├── __pycache__
│   │   └── settings.cpython-36.pyc
│   └── settings.py #配置文件
├── core #主程序目录
│   ├── __pycache__
│   │   └── src.cpython-36.pyc
│   └── src.py #主程序
└── log

二、流程图



三、代码

目录结构:

from_windows.py(待上传的文件)

main.py(批量主机管理接口)

"""批量主机管理接口"""
from 作业 import core if __name__ == "__main__":
core.run()

core.py(核心代码,被接口调用)

"""核心代码"""
from 作业 import settings
import paramiko
import threading,os class REMOTE_HOST(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 run(self):
"""起线程连接远程主机后调用"""
cmd_str = self.cmd.split()[0]
if hasattr(self, cmd_str): # 反射 eg:调用put方法
getattr(self, cmd_str)()
else:
# setattr(x,'y',v)is equivalent to ``x.y=v''
setattr(self, cmd_str, self.command)
getattr(self, cmd_str)() # 调用command方法,执行批量命令处理 def command(self):
"""批量命令处理"""
ssh = paramiko.SSHClient() # 创建ssh对象
# 允许连接不在know_hosts文件中的主机
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect(hostname=self.host, port=self.port, username=self.username, password=self.password)
stdin, stdout, stderr = ssh.exec_command(self.cmd)
print("%s".center(50, "-") % self.host)
res, err = stdout.read(), stderr.read()
result = res if res else err
print(result.decode())
ssh.close() def put(self):
"""上传文件"""
filename = self.cmd.split()[1] # 要上传的文件
transport = paramiko.Transport((self.host, self.port))
transport.connect(username=self.username, password=self.password)
sftp = paramiko.SFTPClient.from_transport(transport)
sftp.put(filename, filename)
print("put sucesss") transport.close()
def get(self):
"""下载文件"""
filename = self.cmd.split()[1] # 要下载的文件
transport = paramiko.Transport((self.host, self.port))
transport.connect(username=self.username, password=self.password)
sftp = paramiko.SFTPClient.from_transport(transport)
sftp.get(filename, filename)
print("get sucesss") transport.close() def show_host_list():
"""通过选择分组显示主机名与IP"""
for index, key in enumerate(settings.msg_dic):
print("%s\033[34m 主机组:%s \033[0m \033[33m 主机数量:%s\033[0m" % (index + 1, key, len(settings.msg_dic[key])))
while True:
choose_host_list = input(">>(请输入用户组编号如:group1): ").strip()
host_dic = settings.msg_dic.get(choose_host_list)
if host_dic:
# print(host_dic)
for key in host_dic:
print(key, host_dic[key]["IP"])
return host_dic
else:
print("NO exit this group!") def interactive(choose_host_list):
"""根据选择的分组主机起多个线程进行批量交互"""
thread_list = []
while True:
cmd = input(">>>").strip()
if cmd:
for key in choose_host_list:
host, port, username, password = choose_host_list[key]["IP"], choose_host_list[key]["port"], \
choose_host_list[key]["username"], choose_host_list[key]["password"]
func = REMOTE_HOST(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:
continue def run():
choose_host_list = show_host_list()
interactive(choose_host_list)

settings.py(配置文件)

"""配置文件"""
msg_dic = {
"group1":{ #分组1
"h1":{"IP":"192.168.50.134", "username":"root", "password":"521521", "port":22}
}}
#可以分多组我就一台测试机器

测试:

硬件限制,我只用连接一台虚拟机测试~

C:\Users\Administrator\PycharmProjects\s14\venv\Scripts\python.exe C:/Users/Administrator/PycharmProjects/s14/作业/main.py
1 主机组:group1   主机数量:1
>>(请输入用户组编号如:group1): group1
h1 192.168.50.134
>>>put from_windows.py
put sucesss
>>>
>>>ls
------------------------192.168.50.134------------------------
anaconda-ks.cfg
database_test
from_windows.py
install.log
install.log.syslog
m
oot
\root
tmp\from_windows.py >>>

上传前没有from_windows.py文件,上传后就有了!

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

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

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

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

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

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

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

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

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

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

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

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

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

  7. 轻量级批量管理工具pssh

    pssh工具 pssh工具是个轻量级的批量管理工具,相比同类型的开源工具 Ansible,Saltstack,他比较轻量级,需要对管理的主机做秘钥认证 Ansible是可以做秘钥认证,也可以通过配置文 ...

  8. Python黑帽编程1.3 Python运行时与包管理工具

    Python黑帽编程1.3  Python运行时与包管理工具 0.1  本系列教程说明 本系列教程,采用的大纲母本为<Understanding Network Hacks Attack and ...

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

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

随机推荐

  1. 使用Jmeter对观影券查询接口做性能测试

    线程数:虚拟用户数.一个虚拟用户占用一个进程或线程.设置多少虚拟用户数在这里也就是设置多少个线程数. 准备时长: 设置的虚拟用户数需要多长时间全部启动.如果线程数为20 ,准备时长为10 ,那么需要1 ...

  2. rtmp 协议详解

    1. handshake 1.1 概述 rtmp 连接从握手开始.它包含三个固定大小的块.客户端发送的三个块命名为 C0,C1,C2:服务端发送的三个块命名为 S0,S1,S2. 握手序列: 客户端通 ...

  3. zeppelin 无法连接一个已有的standalone模式的spark集群

    SparkInterpreter.java  这个文件里面读取master的属性有些问题: 原来代码中"master"属性的获取的地方应该是错了.设置和读取这个属性的对象不是同一个 ...

  4. LC 759. Employee Free Time 【lock, hard】

    We are given a list schedule of employees, which represents the working time for each employee. Each ...

  5. LC 163. Missing Ranges 【lock, hard】

    Given a sorted integer array nums, where the range of elements are in the inclusive range [lower, up ...

  6. Windows下Elasticsearch安装问题处理

    按ES官网的安装方法正常安装就行了.可能遇到的其他问题. 1.报jvm.dll不存在. 只需要重新安装JDK过后,会有jdk1.8.0_73目录和jre1.8.0_73目录.因为java就喜欢玩这种“ ...

  7. 关于SVN的405错误Server sent unexpected return value (405 Method Not Allowed)的解决办法

    一大早上捣鼓项目提交的时候出现这个错误: svn:server sent unexpected return value 405 method not allowed 百度了很多解决办法都没有解决,看 ...

  8. CentOS 安装jdk 1.8

    方法一:手动解压JDK的压缩包,然后设置环境变量   1.在/usr/目录下创建java目录  [root@localhost ~]# mkdir/usr/java [root@localhost ~ ...

  9. React Native中ref的用法(通过组件的ref属性,来获取真实的组件)

    ref是什么? ref是组件的特殊属性,组件被渲染后,指向组件的一个引用.可以通过组件的ref属性,来获取真实的组件.因为,组件并不是真正的DOM节点,而是存在于内存中的一种数据结构,称为虚拟的DOM ...

  10. Java闭包和回调

    Java中的闭包与回调可以通过成员内部类来实现. 简单的来说闭包就是返回一个内部类对象,这个内部类对象包含了外部类对象的信息(因为一个内部类对象定依托于一个外部类对象). 回调就是在闭包的基础上实现的 ...