以下是一个实现该功能的Python脚本:

import ldap
import ldap.modlist as modlist
import csv

# OpenLDAP连接配置
l = ldap.initialize("ldap://localhost:389")
l.simple_bind_s("cn=admin,dc=my-domain,dc=com", "admin_password")

# 读取AD域中的组信息
with open('groups.csv', newline='') as csvfile:
    reader = csv.reader(csvfile, delimiter=',', quotechar='"')
    for row in reader:
        group_dn = "cn=" + row[0] + ",ou=Groups,dc=my-domain,dc=com"
        group_entry = {
            "objectClass": ["top", "groupOfNames"],
            "cn": [row[0]],
            "member": [f"cn={user},ou=Users,dc=my-domain,dc=com" for user in row[1:]]
        }
        try:
            # 如果组已经存在则更新,否则创建
            l.modify_s(group_dn, modlist.modifyModlist(l.search_s(group_dn, ldap.SCOPE_BASE)[0][1], group_entry))
        except ldap.NO_SUCH_OBJECT:
            l.add_s(group_dn, modlist.addModlist(group_entry))

# 读取AD域中的用户信息
with open('users.csv', newline='') as csvfile:
    reader = csv.reader(csvfile, delimiter=',', quotechar='"')
    for row in reader:
        user_dn = "cn=" + row[0] + ",ou=Users,dc=my-domain,dc=com"
        user_entry = {
            "objectClass": ["top", "person", "organizationalPerson", "inetOrgPerson"],
            "cn": [row[0]],
            "sn": [row[1]],
            "givenName": [row[2]],
            "mail": [row[3]],
            "userPassword": [row[4]],
        }
        try:
            # 如果用户已经存在则更新,否则创建
            l.modify_s(user_dn, modlist.modifyModlist(l.search_s(user_dn, ldap.SCOPE_BASE)[0][1], user_entry))
        except ldap.NO_SUCH_OBJECT:
            l.add_s(user_dn, modlist.addModlist(user_entry))

l.unbind_s()

该脚本假设已经从AD域中导出了两个CSV文件:一个包含组信息,一个包含用户信息。每行都是一个条目,以逗号分隔各个字段,例如:

groups.csv:

Group1,User1,User2
Group2,User3,User4,User5

users.csv:

User1,LastName1,FirstName1,user1@my-domain.com,password1
User2,LastName2,FirstName2,user2@my-domain.com,password2
User3,LastName3,FirstName3,user3@my-domain.com,password3
User4,LastName4,FirstName4,user4@my-domain.com,password4
User5,LastName5,FirstName5,user5@my-domain.com,password5

脚本通过LDAP协议连接到OpenLDAP服务器,并使用管理员凭据进行身份验证。然后,它循环遍历CSV文件中的每个组和用户条目,并使用LDAP modify或add操作将它们添加到或更新到OpenLDAP中。如果组或用户已经存在,则使用modify操作更新其属性,否则使用add操作创建一个新的条目。最后,脚本断开与OpenLDAP的连接

使用python脚本编写一个读取AD域中已存在的组与用户信息同步到openldap中如果openldap中已经存在账号则更新如果不存在则创建

原文地址: https://www.cveoy.top/t/topic/fHvK 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录