如何用Python的ms-active-directory库以计算机身份登录AD?
以计算机身份登录Active Directory的解决方案
核心问题说明
AD计算机账号的密码默认由系统自动维护(每30天轮换),手动创建的计算机账号初始密码是随机生成的,因此你无法直接用未知密码调用create_session_as_computer完成认证,会触发invalidCredentials错误。下面提供两种可行方案:测试环境下重置计算机密码,或通过程序自动创建并管理计算机账号。
方案一:测试环境重置计算机密码
先用管理员账号修改目标计算机的密码,再用新密码完成认证:
1. 用管理员会话修改计算机密码
from ms_active_directory import ADConnection # 初始化管理员会话 admin_session = ADConnection.create_session_as_user( username='Administrator@yourdomain.com', password='YourAdminPassword', ldap_server='ldap://dc.yourdomain.com' ) # 计算机对象的DN(根据你的实际OU路径调整) computer_dn = 'CN=Tester,OU=Computers,DC=yourdomain,DC=com' computer_obj = admin_session.get_object(computer_dn) # 设置新密码:必须用双引号包裹,再转成UTF-16LE编码 new_computer_pwd = '"TestComputerPass123!"' computer_obj.set_attribute('unicodePwd', new_computer_pwd.encode('utf-16-le')) # 提交修改 computer_obj.commit()
2. 用新密码创建计算机会话
注意计算机账号的用户名需要以$结尾,或使用UPN格式:
computer_session = ADConnection.create_session_as_computer( computer_name='Tester$@yourdomain.com', password='TestComputerPass123!', ldap_server='ldap://dc.yourdomain.com' ) # 验证会话有效性 print(computer_session.get_domain_info())
方案二:自动创建并管理计算机账号
通过管理员会话创建计算机账号时,ms-active-directory库会自动生成并维护密码,无需手动干预,适合自动化测试场景:
from ms_active_directory import ADConnection # 管理员会话 admin_session = ADConnection.create_session_as_user( username='Administrator@yourdomain.com', password='YourAdminPassword', ldap_server='ldap://dc.yourdomain.com' ) # 在指定OU下创建计算机账号 computer_account = admin_session.create_computer_account( computer_name='AutoTester', ou_dn='OU=Computers,DC=yourdomain,DC=com' ) # 直接用生成的账号对象创建会话 computer_session = computer_account.create_session() # 验证会话 print(computer_session.get_domain_info())
额外测试优化(可选)
如果不想频繁处理密码轮换,可在测试域中修改计算机密码策略:将计算机账号的密码有效期设为0(永不过期),避免自动轮换。此操作仅适合测试环境,生产环境请勿修改默认策略。
内容的提问来源于stack exchange,提问作者NumeroUnoDE
相关产品推荐
相关产品推荐

