背景
由于我们很多公司都使用了微软的AD域控系统,同时AD域控系统也自带了DNS服务,但是这里就出现一种情况,就是当我们需要进行各种域名的解析的操作时,就需要远程登陆到AD域控服务器进行操作,这种频繁登录服务器也存在一定的安全隐患,同时对于管理域名解析等资源也不方便,针对这个问题,我们可以对接微软DNS相关接口功能来进行自助化操作。
启用WinRM
由于微软并没有开通DNS相关操作的API接口,而我们需要通过python进行对接,则可通过python远程执行相关的dns操作命令的方式实现,因此需要开通windows服务器的winrm服务,同时打开winrm服务的baisc认证。
1、登录Windows服务器,并以管理员身份运行powershell
在命令行上运行 winrm quickconfig。
执行 winrm enumerate winrm/config/listener 命令确认结果。
设定为Basic认证。
可以执行下条两命令开通Basic认证,注意有单引号
C:\> winrm set winrm/config/service '@{AllowUnencrypted="true"}'
C:\> winrm set winrm/config/service/auth '@{Basic="true"}'
执行 winrm get winrm/config 命令确认结果。
2、安装pywinrm
使用pip3命令安装pywinrm模块。
pip3 install pywinrm
3、pywinrm使用
安装好了pywinrm后,我们就可以使用其来远程连接到windows服务器,并执行远程命令。
1、初始化连接
session = winrm.Session(服务器IP, auth=(用户名, 密码))
2、执行远程命令
可以通过run_cmd
方法来执行我们提供的远程命令,并对输出进行编码,如下所示:
session.run_cmd("dnscmd /zoneinfo qianhaitest.com").std_out.decode('utf-8')
4、DNS操作
对于DNS的操作,使用的是微软提供的dnscmd命令服务,官方文档如下:Dnscmd | Microsoft Learn
1、添加解析记录
# 添加NS记录
session.run_cmd("dnscmd /recordadd test.com aa NS bb.test.com").std_out.decode('utf-8')
# 添加A记录
session.run_cmd("dnscmd /recordadd test.com cc A 10.60.0.1").std_out.decode('utf-8')
2、删除解析记录
# 注意,一定在后面添加/f,要不然不会执行
session.run_cmd("dnscmd /recorddelete test.com aa NS bb.test.com /f").std_out.decode('utf-8')
3、列出所有的zone
session.run_cmd("dnscmd /enumzones /Primary").std_out.decode('utf-8')
更多的操作,可以查看微软提供的dnscmd
文档
原创文章,作者:jiafegn,如若转载,请注明出处:https://www.techlearn.cn/archives/2262