设为首页 收藏本站
查看: 1028|回复: 0

[经验分享] python批量通过mysql修改用户密码

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2016-8-5 09:40:51 | 显示全部楼层 |阅读模式
1.先创建修改密码的表passmod.svrlist,并插入两条数据

1
2
3
4
5
6
7
svr_host   #远程连接的主机host
svr_port   #通过此端口连接到远程主机
svr_user   #远程连接的主机用户
svr_passwd_old  #远程连接的主机密码
svr_passwd_new #远程连接的主机需要设置的新密码
mod_time   #默认为空,修改成功后,返回修改的时间
mod_status enum('0','1')  #默认为‘0’,修改成功变成‘1’



并授权insert,select,update操作给passmod用户'passmod'@'%'
1
vi tb_create.py   #这里用一条sql语句i,甚至用shell编写更简单。主要为了学习MySQLdb模块



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
#!/usr/bin/python
import MySQLdb
try:
    conn=MySQLdb.connect(host='192.168.163.138',user='root',passwd='zhang1992',port=3306)
    cur=conn.cursor()
    print 'connect begin...'
except:
    print "connect mysql error!"
    exit(1)
def create_tb(cur,db_name,tb_name):
    cur.execute("drop database if exists %s"%db_name)
    cur.execute("create database %s"%db_name)
    cur.execute("use %s"%db_name)
    cur.execute("create table %s(svr_host varchar(50) not null,svr_port varchar(20) not null,svr_user varchar(50) not null,svr_passwd_old varchar(50),svr_passwd_new varchar(50) not null,mod_time timestamp null,mod_status enum('0','1') default '0')"%tb_name)
    return 0
def user_grant(cur,db_name,tb_name):
    sql="grant select,update,insert on %s.%s to '%s'@'%%' identified by 'zhang1992'"%(db_name,tb_name,db_name)
    create_tb(cur,db_name,tb_name)
    cur.execute(sql)
    cur.execute('flush privileges')
def main():
    db_name='passmod'
    tb_name='svrlist'
    user_grant(cur,db_name,tb_name)
    cur.execute("insert into %s.%s(svr_host,svr_port,svr_user,svr_passwd_new,svr_passwd_old) value ('192.168.163.138','22','root','zhang1992','zhang1992')"%(db_name,tb_name))
    cur.execute("insert into %s.%s(svr_host,svr_port,svr_user,svr_passwd_new,svr_passwd_old) value ('192.168.163.226','22','root','zhang1992','zhang1992')"%(db_name,tb_name))

    cur.close()
    conn.commit()
    conn.close()
    print 'connect end...'
    return 0
if __name__=='__main__':
    main()



执行tb_create.py
1
python tb_create.py



QQ截图20160805094010.png
查询数据库
QQ截图20160805094016.png
2.编写mod_passwd.py脚本

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
#!/usr/bin/python

import os,MySQLdb,paramiko,time

try:
    #通过passmod用户去连接mysql,上一脚本已经授权
    conn=MySQLdb.connect(host='192.168.163.138',user='passmod',passwd='zhang1992',db='passmod',port=3306)
except:
    print "conn mysql error..."
    exit(1)

cur=conn.cursor()

def connect_mod(svrlist):
    #通过paramiko模块去远程登录主机,并修改密码
    cli=paramiko.SSHClient()
    cli.set_missing_host_key_policy(paramiko.AutoAddPolicy())
    try:
        cli.connect(hostname=svrlist[0],port=svrlist[1],username=svrlist[2],password=svrlist[3],timeout=5)
    except:
        print "%s connect error..."%svrlist[0]
        return 0
    stdin,stdout,stderr=cli.exec_command("/bin/echo %s|/usr/bin/passwd --stdin %s" %(svrlist[4],svrlist[2]))

    if len(str(stderr.read()))!=0:
        return 0

    cli.close()
    return 1

def main():
    cur.execute("select * from svrlist")
    for row in  cur.fetchall():
        svr_host=str(row[0])
        svr_port=int(row[1])
        svr_user=str(row[2])
        svr_passwd_old=str(row[3])
        svr_passwd_new=str(row[4])
        #只有mod_status为0,才会去修改密码
        #修改密码后,update行,修改mod_status=1,mod_time为当前修改时间
        if int(row[6])==0:
            svrlist=(svr_host,svr_port,svr_user,svr_passwd_old,svr_passwd_new)
            modpass=connect_mod(svrlist)
            #修改成功,则modpass为1
            if modpass==1:
                print svrlist[0],":",svrlist[2],"Successful"
                mod_time=time.strftime("%Y-%m-%d %H:%M:%S",time.localtime(time.time()))
                cur.execute("update svrlist set mod_status='1',mod_time='%s' where svr_host='%s' and svr_user='%s'"%(mod_time,svr_host,svr_user))
            else:
                print svrlist[0],":",svrlist[2],"Failed"
    cur.close()
    conn.commit()
    conn.close()
    return 0

if __name__=='__main__':
    main()  



执行mod_passwd.py
QQ截图20160805094022.png
查询数据库
QQ截图20160805094026.png


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-253134-1-1.html 上篇帖子: python 正则匹配的re.search 例子 下篇帖子: 使用python编写批量ping主机脚本 python mysql 密码 用户
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表