Вариант управления компьютером на Windows из-под консоли Linux

в 10:14, , рубрики: linux, windows, системное администрирование, метки: ,

Бывают попадаются задачи, когда надо что-то сделать из-под Linux-а на машине, на которой установлен Windows, но не через RDP или VNC. Или например, как в моём случае, основная машина на Linux и необходимо управлять группой серверов. И для простых задач, например простого запроса типа dsquery group -name "Группа" | dsget group -members | dsget user, который выдаст полный список членов группы в Active Directory со всеми полями — не запускать же ради такого сеанс RDP.
Простого и удобного инструментария я, если честно, не нашёл. За исключением двух утилит: wmic и winexe, которые входят в комплекты Zenoss и OpenVAS. Вернее входили в Zenoss. Не суть, отдельно их я не нашёл, поэтому далее предлагаю свой вариант, большей частью для конкретного дистрибутива (Xubuntu 13.04), но при должной сноровке — всё можно сделать и в любом другом.
Итак, начнём:

wget http://www.openvas.org/download/wmi/wmi-1.3.14.tar.bz2
tar -xvf wmi-1.3.14.tar.bz2
cd wmi-1.3.14Sambasourcewineexe

Далее либо вручную либо с помощью patch -p0 -i patchfile применяем изменения из https://gist.github.com/raw/843062/5bb87c4fa13688f65ca8b1e54fc42676aee42e5a/fix_winexe_service.diff.
Потом:

sudo make

После чего можно уже делать:

winexe -U domain/user%password //server 'dsquery group -name "Группа"| dsget group -members | dsget user'

или

wmic -U domain/user%password //server 'select * from Win32_ComputerSystem'

Первая команда winexe позволяет запускать любые консольные команды через RPC на Windows-машине, вторая позволяет делать WMI-запросы, что вообщем-то даёт ещё больше возможностей (вот справочник по WQL, это вариант SQL for WMI — http://msdn.microsoft.com/en-us/library/windows/desktop/aa394606%28v=vs.85%29.aspx).
Однако есть проблема с выводом консоли winexe от удалённой машины, поскольку Microsoft любит и UTF-8, и CP1251, и CP866 разом. Точнее, в моём случае, вывод был в старой доброй CP866. Проблема решается очень просто:

luit -encoding cp866 winexe -U domain/user%password //server 'cmd'

И на выводе затем мы имеем:

Microsoft Windows [Version 6.1.7601]
(c) Корпорация Майкрософт (Microsoft Corporation), 2009. Все права защищены.

C:Windowssystem32>

Однако, опять таки в моём случае, luit 1.1 категорически не хотел видеть charmaps для cp866 и выдавал Warning: couldn't find charset data for locale XXXX; using ISO 8859-1 (похоже на https://bugs.launchpad.net/ubuntu/+source/x11-utils/+bug/280449, фикс есть, пакета нет). Я решил для себя, что проще скачать исходники сильно свежего leit-а — http://invisible-island.net/luit. Увидеть его в составе x11-utils, где обычно он и бывает, вряд ли будет возможно. Далее:

./configure 

Возможно не будет каких-то зависимостей, всё решаемо. У меня всё пролетело быстро.

sudo make 

Свежескомпилированный luit 2.0 прекрасно переконвертирует на лету из 866 в UTF-8, т.е. в целом моя задача выполнена.
В целом руководствовался тем, что конкретная рабочая машина, настроенная один раз будет управлять любой дефолтной Windows-машиной, на которой запущен RPC и есть права.
Надеюсь на критику, комментарии и предложения.

Автор: bmar

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js