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
查詢數據庫
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
查詢數據庫