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 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76
| import ldap3 from pypinyin import pinyin, lazy_pinyin import random import string import argparse import re
#readme:在命令行调用传入用户名字参数会自动写入到ldap,生成用户名以及密码。传入格式为 python ldap1.py 张三,如果有多个用户则 python ldap1.py 张三 李四 。传入的格式必须是中文,否则会返回错误。
def generate_random_password(length=8): #生成随机密码函数 """生成指定长度的随机密码""" # 定义包含各种字符的备选字符串 characters = string.ascii_letters + string.digits #+ string.punctuation(这个是随机字符,不需要)
# 从备选字符串中随机选择指定数量的字符,拼接成密码字符串 password = ''.join(random.choices(characters, k=length))
return password
# 设置LDAP服务器信息 server = ldap3.Server('ldap://192.168.110.200:1389') dn = 'cn=admin,dc=finsiot,dc=com' # 这里是管理员的DN password = '123456'
# 添加新用户 def ldap_adduser(name): #添加用户函数,也是这里主要功能提供的函数 pwd = generate_random_password(10) # 密码,随机生成10位由字母和数字组合的密码 name_pinyin = lazy_pinyin(name) # 将名字转换成拼音 first_name = name_pinyin[0] #姓拼音 last_name = ''.join(name_pinyin[1:]) #名拼音 name_head = first_name[0] # 姓首字母加名字母 uid = name_head + last_name # 姓首字母加名字母,一般用于登录用户名,登录用户名格式为:姓拼音+名字拼音 mail = first_name + '.' + last_name + '@finsiot.com' #邮件格式拼接,由于公司邮箱格式为:姓.名字@finsiot.com with ldap3.Connection(server, user=dn, password=password) as conn: new_user = { 'objectClass': ['top', 'person', 'inetOrgPerson'], #"objectClass"是条目的一个必需属性,用于指定该条目所属的对象类。对象类是定义LDAP目录树中条目类型的一种机制,包含一组属性和规范,用于描述条目应该具有哪些属性和如何使用这些属性。LDAP支持多继承的对象类模型,这意味着条目可以同时属于多个对象类。 #objectclass是属性定义类,也是顶级类,下面的所有字段都来自于objectclass提供。 'userPassword': f'{pwd}', 'mail': f'{mail}', 'uid': f'{uid}', 'description': f'{name}', #姓名 'givenName': f'{first_name}', #姓氏 'sn': f'{last_name}', #名 } try: cn = first_name + ' ' + last_name #cn conn.add(f'cn={cn},ou=test,dc=finsiot,dc=com', attributes=new_user) #print('New user created successfully!') except ldap3.LDAPExceptionError as e: print(f'Error creating new user: {e}') # 断开与LDAP服务器的连接 conn.unbind() return uid,pwd
# 创建参数解析器 parser = argparse.ArgumentParser() # 添加一个参数,类型为 list parser.add_argument('mylist', nargs='+', type=str) # 解析参数 args = parser.parse_args() # 检查 mylist 参数是否都是中文字符 if not all(re.match('^[\u4e00-\u9fa5]+$', item) for item in args.mylist): parser.error('请输入正确的名字,所有参数都必须是中文字符。') # 访问 mylist 参数 name = args.mylist #上面的代码主要是判断命令行传入参数是否为中文,最终的参数保存为列表并存于name变量
#轮询name并执行添加用户操作,最后打印用户名密码 for i in name: usernameAndPassword=ldap_adduser(i) print(f'用户{i}已创建成功,账号为:{usernameAndPassword[0]},密码为:{usernameAndPassword[1]}')
|