使用paramiko,pymysql批量管理主机, 用户信息,及主机信息存在数据库中
例子:
#!/usr/bin/python
# --*-- coding:utf-8 --*--
import paramiko
import pymysql
from threading import Thread, RLock
import sysdef 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_resdef 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 Falsedef 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.idand host_user_tb.userId=%s',[data])
host_info = cursor.fetchall()
cursor.close()
conn.close()
return host_infoclass 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('ipportusernamepasswd')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()
【python|python 使用paramiko, pymysql实现批量管理服务器】转载于:https://blog.51cto.com/haoyonghui/1947584