- PVSM.RU - https://www.pvsm.ru -

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

Бывают попадаются задачи, когда надо что-то сделать из-под 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 [1].
Потом:

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 [2]).
Однако есть проблема с выводом консоли 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 [3], фикс есть, пакета нет). Я решил для себя, что проще скачать исходники сильно свежего leit-а — http://invisible-island.net/luit [4]. Увидеть его в составе x11-utils, где обычно он и бывает, вряд ли будет возможно. Далее:

./configure 

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

sudo make 

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

Автор: bmar

Источник [5]


Сайт-источник PVSM.RU: https://www.pvsm.ru

Путь до страницы источника: https://www.pvsm.ru/linux/35304

Ссылки в тексте:

[1] https://gist.github.com/raw/843062/5bb87c4fa13688f65ca8b1e54fc42676aee42e5a/fix_winexe_service.diff: https://gist.github.com/raw/843062/5bb87c4fa13688f65ca8b1e54fc42676aee42e5a/fix_winexe_service.diff

[2] http://msdn.microsoft.com/en-us/library/windows/desktop/aa394606%28v=vs.85%29.aspx: http://msdn.microsoft.com/en-us/library/windows/desktop/aa394606%28v=vs.85%29.aspx

[3] https://bugs.launchpad.net/ubuntu/+source/x11-utils/+bug/280449: https://bugs.launchpad.net/ubuntu/+source/x11-utils/+bug/280449

[4] http://invisible-island.net/luit: http://invisible-island.net/luit

[5] Источник: http://habrahabr.ru/post/181103/