У меня есть система, состоящая, скажем, из 10 рабочих станций Windows 7 Professional, объединенных в домен.
Как часть процедуры «аварийного» выключения системы, мне нужен механизм запуска удаленного выключения с контроллера Linux (который, в свою очередь, является инструментом оркестровки служб). Слово «чрезвычайная ситуация» заключено в кавычки, потому что это не действительно чрезвычайной ситуации, но все же нужен механизм, отличный от простого указания пользователям выключить рабочие станции.
Итак, я посмотрел на psexec
, что почти идеально, за исключением того, что запускается только с другой машины Windows. .. Я полагаю, что сервер Windows запускает процедуру выключения рабочей станции, но это не идеально.
Я понял, что один из вариантов - установить Cygwin и OpenSSH, но, честно говоря, это кажется громоздкий.
В идеале мне бы хотелось ... Это программа, которая работает как служба с привилегиями локального (или доменного) администратора, прослушивает порт для зашифрованного SSL вызова RESTful API, например, http://workstation:8888/admin/shutdown?key=secretsharedkey
.
Нужно ли мне что-то писать на C # .net, или есть инструмент для кросс-платформенного запуска выключения рабочей станции Windows?
Как насчет использования net
инструмент из пакета Samba?
Например:
net rpc shutdown -S workstation1 -U Administrator -w example.com
Вам могут потребоваться немного другие параметры командной строки, такие как -k
для аутентификации с помощью Kerberos; проверьте страницу руководства.
Ты можешь использовать Winexe. Он использует вызов RPC для установки службы на целевом компьютере, а затем использует эту службу для выполнения команд на нем. Вы можете указать учетные данные, и сервер Linux не обязательно должен быть членом домена.
Остерегайтесь этого является хотя на основе кода Samba;)
RPC - это способ, но может потребоваться дополнительная настройка, особенно для Windows Vista, Windows 7 и других версий Windows, чтобы обеспечить удаленное завершение работы:
A) Часть настройки, которую необходимо выполнить на машине Win7:
1) запустите secpol.msc
в дереве программы откройте «Настройки безопасности / Локальные политики / Назначение прав пользователя»
Найдите запись «Принудительное завершение работы из удаленной системы».
Отредактируйте запись, добавьте пользователя CONCRETE, который будет использоваться для выключения (например, nouknouk)
2) Запустите regedit.exe от имени администратора.
найдите HKLM / SOFTWARE / Microsoft / Windows / CurrentVersion / Policies / System
создайте новое значение DWORD (32) реестра с именем «LocalAccountTokenFilterPolicy» и затем присвойте ему значение «1»
3) Настройте службу удаленного реестра:
откройте «cmd.exe» от имени администратора
выполните две следующие команды:
sc config RemoteRegistry start = авто
sc запустить RemoteRegistry
Б) Часть настройки, выполняемая на Linux-машине:
1) установите пакет "samba-common":
Это зависит от вашего дистрибутива Linux, но для Debian и производных (Ubuntu, Linux Mint, ...) команда apt-get может выполняться следующим образом:
apt-get install samba-common
2) Чтобы фактически выключить ваш windowsmachine из linux, выполните следующую команду:
net rpc shutdown -f -t 0 -C 'сообщение' -U имя пользователя% пароль -I xxx.yyy.zzz.ttt
Куда:
'-f' означает принудительное завершение работы (я думаю, что это обязательно)
'-t 0' - задержка перед выполнением (0 означает «прямо сейчас»).
'-U user% password' - это локальный пользователь и его пароль на машине Windows (тот, который был назначен для удаленного завершения работы в точке A).
'-I' - это IP-адрес машины Windows, которую нужно выключить.