python批量通過mysql修改用戶密碼

1.先創建修改密碼的表passmod.svrlist,並插入兩條數據

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'@'%'

vi tb_create.py   #這裏用一條sql語句i,甚至用shell編寫更簡單。主要爲了學習MySQLdb模塊
#!/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

python tb_create.py

wKiom1eipxnTWKgRAAAFixvqSmw684.png-wh_50

查詢數據庫

wKioL1eipwmx-HOXAAAzvRBaVzU089.png-wh_50

2.編寫mod_passwd.py腳本

#!/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

wKioL1eipyWy9f1UAAAK7NWrz7Y805.png-wh_50

查詢數據庫

wKiom1eipzLCSsB_AAAW_hbOrhM754.png-wh_50

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章