zabbix sync AD users

  1. #!/usr/bin/env python
  2. #coding:utf-8
  3. import ldap,ldif3,sys,re
  4. importMySQLdb
  5. ldap_host="ldap://xx.xx.xx.xx"
  6. ldap_user="xx@xx.xx"#abc@domain.com
  7. ldap_pass="xxxx"
  8. basedn ="OU=group,DC=domain,DC=com"
  9. db_host="10.1.180.166"
  10. db_port=3306
  11. db_user="zabbix"
  12. db_pass="zabbixpwd"
  13. db_Name="zabbix"
  14. #insert user to zabbix
  15. #insert into users (userid,alias,passwd,autologin,type) (select max(userid)+1 as userid,'test','5fce1b3e34b520afeffb37ce08c7cd66',1,3 from users);
  16. #select users
  17. #select alias from zabbix.users where alias not regexp 'AR|Admin|guest' ;
  18. def __mysql_operation(sql):
  19. try:
  20. conn =MySQLdb.connect(host=db_host,user=db_user,passwd=db_pass,port=db_port,db=db_Name)
  21. cur = conn.cursor()
  22. count = cur.execute(sql)
  23. if count ==0:
  24. zbx_result =0
  25. else:
  26. zbx_result = cur.fetchall()
  27. conn.commit()
  28. cur.close()
  29. conn.close()
  30. #print zbx_result
  31. return zbx_result
  32. exceptMySQLdb.Error,e:
  33. print"Mysql Error:",e
  34. def __ldap_query():
  35. conn = ldap.initialize(ldap_host)
  36. # set domain protocol version
  37. conn.protocol_version =3
  38. conn.set_option(ldap.OPT_REFERRALS,0)
  39. # bind domain user
  40. conn.simple_bind_s(ldap_user,ldap_pass)
  41. ldif_writer = ldif3.LDIFWriter(sys.stdout)
  42. retrieveAttributes =None
  43. results = conn.search_s(basedn,ldap.SCOPE_SUBTREE,"(cn=*)",retrieveAttributes)
  44. # for dn,entry in results:
  45. # ldif_writer.unparse(dn,entry)
  46. cn_list =[]
  47. for result in results:
  48. result_dn = result[0]
  49. result_attrs = result[1]
  50. if"member"in result_attrs:
  51. for member in result_attrs["member"]:
  52. re_result = re.search(r'w+sw+',member)
  53. if re_result:
  54. cn_list.append(re_result.group().replace(' ','').lower())
  55. #print member
  56. user_list = sorted(set(cn_list))
  57. return user_list
  58. def main():
  59. select_sql ='''select alias from users where alias not regexp 'AR|Admin|guest' ;'''
  60. select_result = __mysql_operation(select_sql)
  61. ldap_result = __ldap_query()
  62. zabbix_user_list =[]
  63. for s_row in select_result:
  64. zabbix_user_list.append(s_row[0])
  65. #print zabbix_user_list
  66. # add domain user to zabbix
  67. for l_row in ldap_result:
  68. if l_row in zabbix_user_list:
  69. print"The %s user alrady exist ! "%(l_row)
  70. else:
  71. insert_sql ='''insert into users (userid,alias,passwd,autologin,autologout,type) (select max(userid)+1 as userid,'%s','5fce1b3e34b520afeffb37ce08c7cd66',1,0,1 from users);'''%(l_row)
  72. __mysql_operation(insert_sql)
  73. print"Add %s user successed !"%(l_row)
  74. # if zabbix user not exist for domain , delete this user.
  75. for s_row in zabbix_user_list:
  76. if s_row notin ldap_result:
  77. delete_sql ='''delete from users where alias = "%s" ;'''%(s_row)
  78. __mysql_operation(delete_sql)
  79. print"Delete invalid %s user succeesed !"%(s_row)
  80. else:
  81. print"Not have invalid users !"
  82. if __name__ =='__main__':
  83. main()
首先:在windows AD创建一个zabbix用户, 最好和zabbix默认账号一致
然后配置ldap
 
 
执行脚本后,将AD所有用户都同步过来了,定期执行脚本,会自动添加删除用户, 同步AD
 
 





原文地址:https://www.cnblogs.com/gyming/p/5781381.html