Назад | Перейти на главную страницу

Добавьте СТАТИЧЕСКИЕ записи DNS в Microsoft DNS с помощью nsupdate

Я являюсь администратором Microsoft DNS в своей компании. Администратор Linux использует nsupdate для добавления нескольких записей DNS A и PTR в Microsoft DNS для своих серверов. Записи поступают с отметкой времени, и очистка DNS удаляет их по истечении нашего настроенного периода времени. Как он может запустить команду для добавления только статических записей?

Вот наше решение, которое мы используем на веб-сервере управления (не совсем то решение, которое вы запрашивали, но мы решили, что в нашем случае это будет только рабочее решение)

Действия по воспроизведению:

  1. Настроить WinRM на одном хосте Windows (для этого мы использовали наш DHCP-сервер) https://support.microsoft.com/en-us/help/2019527/how-to-configure-winrm-for-https
  2. Установите python и Pywinrm на вашем хосте или централизованном хосте. Мы размещаем весь наш внутренний хост и управление IP на веб-сервере, который берет на себя эту роль.
  3. Получите имя пользователя и пароль или файл Kerberos Keytab от учетной записи пользователя, которая имеет права на управление записями DNS.
  4. Учетная запись хост-компьютера Windows, которая действует как конечная точка WinRM, должна иметь включенное делегирование Kerberos для пересылки учетных данных на целевой DNS-сервер.
  5. Есть Windows RSAT установлен, чтобы dnscmd.exe был доступен на хосте WinRM.
  6. Мне пришлось изменить одну строку в transport.py файл, предоставленный pywinrm, чтобы Kerberos работал со сценарием, приведенным ниже. (К сожалению, я больше не могу найти эту строку ... sry) (Вы можете пропустить это, если хотите аутентифицироваться с помощью имени пользователя и пароля. Делегирование Kerberos все еще необходимо, если вам нужно пройти аутентификацию на DNS-сервере. Вы можете только пропустите это, если вы открываете winRM на DNS-сервере (НЕ РЕКОМЕНДУЕТСЯ!))
  7. Выполните сценарий следующим образом: kinit -f -t /path/to/krb5.keytab -k username@DOMAIN ; LANG=\"C.UTF-8\" ; /the/script/provided/below.py -m mywinrmhost.example.org -c "dnscmd.exe dns dns server.example.org /recordadd example.org entire.example.org /CreatePTR newentrie 10.20.30.40"
#!/usr/bin/python3

#https://support.microsoft.com/en-us/help/2019527/how-to-configure-winrm-for-https

import winrm, sys, getpass, argparse
__author__ ='Daywalker (at least partially)'

parser = argparse.ArgumentParser(description='This is a basix winRM script')
parser.add_argument('-a','--auth',help='Authentication type (plaintext|kerberos)', default="kerberos", required=False)
parser.add_argument('-m','--host', help='Hostname or IP address of the target Windows machine',required=False)
parser.add_argument('-u','--user',help='Username for authentication', required=False)
parser.add_argument('-p','--password',help='Password for the given username', required=False)
parser.add_argument('-c','--command',help='Command to execute', required=False)

args = parser.parse_args()

hostname = args.host
user = args.user
pw = args.password
command = args.command
auth = args.auth;

if not hostname:
    hostname = "mytargetwinrmhost.example.org"
if args.auth != 'kerberos':
    if not user:
        user = input("Enter a username for the WinRM connection to " + hostname + ": ")

    if not pw:
        print("Enter password for " + user)
        pw = getpass.getpass()

    if not user:
        print("Username missing");
        sys.exit(1);

    if not pw:
        print("Empty passwords not allowed");
        sys.exit(1);

if not hostname:
    print("Hostname missing");
    sys.exit(1);

#s = winrm.Session(hostname,auth=(user,pw),transport='plaintext')
s = winrm.Session(hostname,auth=(user,pw),transport=auth)

if not command:
    command = input("Please enter the command to execute: ")

r = s.run_cmd(command)
#print(r.status_code)
print(r.std_out.decode('437'))
print(r.std_err.decode('437'))
quit()