python 使用paramiko, pymysql实现批量管理服务器

使用paramiko,pymysql批量管理主机, 用户信息,及主机信息存在数据库中
例子:
#!/usr/bin/python
# --*-- coding:utf-8 --*--
import paramiko
import pymysql
from threading import Thread, RLock
import sys

def connect_user_tb():
    """返回执行sql结果"""
    conn = pymysql.Connect(host=‘127.0.0.1‘, port=3306, user=‘root‘, password=‘aixocm‘, database=‘oldboy‘, charset=‘utf8‘)
    cursor = conn.cursor()
    cursor.execute(‘select user_tb.id,username,passwd,email,deptment_tb.name from user_tb left join deptment_tb on user_tb.deptId=deptment_tb.id‘)
    db_res = cursor.fetchall()
    cursor.close()
    conn.close()
    return db_res

def auth():
    """用户登录"""
    count = 0
    while count < 3:
        username = input("请输入用户名: ")
        passwd = input("请输入密码: ")
        user_info = connect_user_tb()
        for i in user_info:
            if username == i[1] and passwd == i[2]:
                return (i)
        else:
            count += 1
            print(‘您输入的用户名密码不正确,请重新输入‘)
            continue
    else:
        return False

def connect_host_user_tb(data):
    conn = pymysql.Connect(host=‘127.0.0.1‘, port=3306, user=‘root‘, password=‘aixocm‘, database=‘oldboy‘,
                           charset=‘utf8‘)
    cursor = conn.cursor()
    cursor.execute(‘select host_tb.ip,host_tb.port,host_tb.username,host_tb.passwd from host_user_tb inner join host_tb on host_user_tb.hostId=host_tb.id  and host_user_tb.userId=%s‘,[data])
    host_info = cursor.fetchall()
    cursor.close()
    conn.close()
    return host_info

class Mythread(Thread):
    def __init__(self, host, port, username, passwd, lock, cmd):
        super().__init__()
        self.host = host
        self.port = port
        self.username = username
        self.passwd = passwd
        self.lock = lock
        self.cmd = cmd
    def run(self):
        with self.lock:
            try:
                ssh = paramiko.SSHClient()
                ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy)  # 忽略密钥认证,使用密码认证
                ssh.connect(hostname=self.host, username=self.username, password=self.passwd)
                stdin, stdout, stderr = ssh.exec_command(self.cmd)
                print("#######################主机%s开始执行名########################" % (self.host))
                print(stdout.read().decode(‘utf-8‘))
                print(stderr.read().decode(‘utf-8‘))
                ssh.close()
                print("#######################主机执行结束########################")
            except Exception as e:
                print(e)
def main():
    """程序入口"""
    lock = RLock()
    auth_res = auth()
    if auth_res:
        host_info = connect_host_user_tb(auth_res[0])
        str = "用户名: %s     邮  箱: %s     部  门: %s" %(auth_res[1],auth_res[3],auth_res[4])
        print(str)
        print(‘ip                 port      username        passwd‘)

        for host in host_info:
            print(host[0] + ‘       ‘,host[1], ‘       ‘ + host[2] + ‘           ‘ + host[3])
        t_list = []
        while True:
            try:
                select_ip = input("请输入要执行命令的主机ip,多个主机以逗号分隔,未选择表示执行所有主机:>>").strip()
                ip_list = select_ip.split(‘,‘)
                cmd = input("请输入执行的命令>>: ").strip()
                if not select_ip:
                    for host in host_info:
                        t = Mythread(host[0],host[1],host[2],host[3],lock,cmd)
                        t.daemon=True
                        t.start()
                        t_list.append(t)
                    for t in t_list:
                        t.join()
                else:
                    for ip in ip_list:
                        for host in host_info:
                            if ip == host[0]:
                                t = Mythread(host[0], host[1], host[2], host[3], lock, cmd)
                                t.daemon = True
                                t.start()
                                t_list.append(t)
                            for t in t_list:
                                t.join()
                is_exit = input("是否退出,输入yY/nN")
                if is_exit.upper() == ‘Y‘:
                    break
            except Exception as e:
                print(e)
                break
    else:
        print(‘登录失败,退出程序‘)

if __name__ == ‘__main__‘:
    main()
时间: 2024-08-27 18:06:47

python 使用paramiko, pymysql实现批量管理服务器的相关文章

Linux批量管理服务器小工具--PSSH

Linux批量管理服务器小工具--PSSH 一.简介 pssh -- parallel ssh program pssh  is  a program for executing ssh in parallel on a number of hosts.  It provides features such as sending input to all of the processes, passing a password to ssh, saving output to files, an

Python自动化运维开发之paramiko(远程批量管理服务器)

一:简介 paramiko是用python语言写的一个模块,遵循SSH2协议,支持以加密和认证的方式,进行远程服务器的连接.它仅需要在本地上安装相应的软件(python以及PyCrypto),对远程服务器没有配置要求,对于连接多台服务器,进行复杂的连接操作特别有帮助. 二:安装方法 安装paramiko有两个先决条件,python和另外一个名为PyCrypto的模块.唯一麻烦的就是安装PyCrypto时,需要GCC库编译,如果没有GCC库会报错,会导致PyCrypto以及paramiko无法安装

批量管理服务器及执行命令

 前言:      当我们在测试或运维的时候如果想要使其多条主机同时执行相同的命令的时候,我们以前得办法是  分别登录这些主机,执行命令.如果主机多的时候,将会消耗大量的时间 ,不利于我们的批量管理. 思路:      如何通过脚本,多线程一起连接这些主机,并同时下发命令?,且可以执行多条命令,在此,我利用python 的paramiko模块实现了此简单的功能 脚本的运行环境:      python 3.0以上,(可以修改下代码,2.x也可以运行),由于paramiko模块不是python 的

史上图形最简单Linux-Unix-Windows批量管理服务器软件工具

Windows 下 批量管理,批量监控,批量操作,批量安全扫描 linux Solaris Aix HP-Unix Windows 等操作系统界面最简洁的图形工具. 批量执行多台服务器命令,批量修改密码,批量执行服务器脚本,批量上传文件,解放你的双手,五分钟批量执行上千台服务器命令. Unix 实验室服务器批量管理监控系统,简称 UnixShellManager UnixShellManager 分简装版, 标准版,企业版. UnixShellManager 实验室批量管理监控系统,能够实现对

一款高级的远程桌面连接批量管理服务器工具拥有的功能

第一,那就是远程批量连接远程批量连接管理,一键批量管理,省去运维人员很多不必要浪费的时间!管理上千台没在话下.第二,其他附加功能一些简单的小功能,虽然说是小功能,不过,这些小功能是根据用户长久的使用过程中需要重复使用而开发的,比如一些快捷键,一个快捷键的功能就能完成的事件,可以省去很多麻烦的步骤!第三,外观工具的外观,说实话还是有影响的,外观甚至会影响用户的心情.外观也包括功能的摆放,不可能是放到工具的一个小疙瘩里吧,影响使用IIS7远程桌面批量管理,我觉得这一款很符合我的要求. 原文地址:ht

Python调用paramiko模块实现远程管理多台服务器

Python中的paramiko是一个非常有用的模块,通过此模块,可以远程操控多台服务器,无需在服务器上安装任何东西,只需要在代码执行机器上有Python,paramiko环境就可以了,对于需要多台服务器协同工作或者要管理多台服务器的情况下非常有帮助. 以下为代码示例 #!/usr/bin/env python # -*- coding:utf-8 -*- import paramiko #远程控制多台测试服务器,用来启动测试相关脚本和程序 ssh = paramiko.SSHClient()

PSSH 批量管理服务器

pssh这个工具,用python写的,python版本大于2.4即可 1 下载 wget http://parallel-ssh.googlecode.com/files/pssh-2.3.1.tar.gz download 2 安装 tarzxvf pssh-2.3.1.tar.gz cdpssh-2.3.1/ python setup.py install install changing mode of /usr/local/bin/pnuketo 755 changing mode of

win服务器批量管理工具 批量管理vps

远程桌面是微软公司为了便于网络管理员管理维护服务器推出的一项服务.从windows 2000 server版本开始引入,网络管理员时候远程桌面连接器连接到网络任意一台开启了远程桌面控制功能的计算机上,就像是自己操作该计算机一样,运行程序,维护数据库等.远程桌面采用的是一种类似TELNET的技术,它是从TELNET协议发展而来的,通俗的讲远程桌面就是图形化的TELNET.那么如何批量管理我们的多台服务器呢?下面向大家介绍一款远程桌面连接工具——IIS7远程桌面连接工具. 查看地址:iis7远程桌面

服务器批量管理工具 批量管理vps

远程桌面是微软公司为了便于网络管理员管理维护服务器推出的一项服务.从windows 2000 server版本开始引入,网络管理员时候远程桌面连接器连接到网络任意一台开启了远程桌面控制功能的计算机上,就像是自己操作该计算机一样,运行程序,维护数据库等.远程桌面采用的是一种类似TELNET的技术,它是从TELNET协议发展而来的,通俗的讲远程桌面就是图形化的TELNET.那么如何批量管理我们的多台服务器呢?下面向大家介绍一款远程桌面连接工具——IIS7远程桌面连接工具. 查看地址:iis7远程桌面