Win32_Сервисы. Получение сервиса через Python с удаленной машины
Я создаю веб-приложение для мониторинга определенных серверов, и часть его — мониторинг определенных служб, которые должны работать на этих серверах. Я написал простой скрипт Python, который тестирует функцию Win32_service, которая должна получать все запущенные службы. Вот код:
import wmi
def get_running_services(computer, user, password):
try:
# Connect to the remote WMI service
connection = wmi.WMI(computer=computer, user=user, password=password)
print(f"Successfully connected to {computer}")
# Get details about running services
running_services = []
for service in connection.Win32_Service(State="Running"):
running_services.append({
"name": service.Name,
"display_name": service.DisplayName,
"status": service.Status,
})
# Print details about each running service
for service in running_services:
print(f"Service Name: {service['name']}")
print(f"Display Name: {service['display_name']}")
print(f"State: {service['state']}")
print(f"Status: {service['status']}")
print("-" * 50)
return running_services
except wmi.x_wmi as e:
print(f"Failed to connect to {computer}: {str(e)}")
return None
except Exception as e:
print(f"An unexpected error occurred: {str(e)}")
return None
get_running_services(IP, User, Password)
И вот мой вывод: успешное подключение к 192.168.xxx.xxx. Не удалось подключиться к 192.168.xxx.xxx: <x_wmi: неожиданная ошибка COM (-2147217405, «ошибка OLE 0x80041003», нет, нет)>
Учетные данные специально изменены в целях безопасности, но они верны.
Как видите, первое подключение прошло успешно, и это потому, что я внес все необходимые изменения, чтобы предоставить моему компьютеру разрешение на подключение к удаленному серверу. Я часами искал решение, но, похоже, не нашел его. Кто-нибудь знает, какое разрешение мне нужно настроить, чтобы иметь возможность получать услуги?
Я попытался предоставить разрешения моему локальному пользователю из удаленной службы с помощью dcomcnfg и wmimgmt.msc и разрешить входящие правила в дополнительных настройках брандмауэра, а также создать новое правило WMI для трафика, которое должно разрешать соединения с неуказанных хостов. (Я знаю, что это небезопасно, я сначала тестирую программу на фиктивном сервере)
1 ответ
исправил это, запустив sc sdset SCMANAGER D:(A;;CCLCRPRC;;;AU)(A;;CCLCRPWPRC;;;SY)(A;;KA;;;BA)S:(AU;FA;KA;;;WD)(AU;OIIOFA;GA;;;WD) в удаленной консоли