Віддалене виключення комп’ютера по мережі

У мене з'явилося завдання по організації оперативного вимикання віддалених серверів в один клік. Причому вимикати сервера повинні різноманітні користувачі, в тому числі і без знань і розуміння принципів роботи сервера. Тобто вони повинні просто натиснути кнопку, щоб сервер автоматично завершив свою роботу.

Причому вимикати по мережі потрібно як windows сервери, так і linux різних дистрибутивів - ubuntu, centos, freebsd. Тобто рішення має бути просте і надійне.

Дистанційне виключення Windows сервера

Почнемо з самого складного. На практиці реалізувати надійний спосіб виключення windows машин по мережі для мене виявилося складніше, ніж linux. Методів і підходів до вирішення даного завдання багато. Я пробував різні варіанти і зупинився на одному, який мені видався найнадійнішим, він спрацював без проблем у всіх випадках під час тестування.

Обов'язковою умовою віддаленого вимкнення сервера є мережевий доступ до нього по rdp. Ви можете знаходиться в локальній мережі з ним, підключитися по vpn або прокинути rdp з'єднання перенаправленням зі шлюзу. Не важливо, головне потрапити в систему по rdp.

Принцип роботи віддаленого відключення наступний:

  1. На комп'ютері або сервері створюється користувач, якому буде дозволено підключатися по rdp і завершувати роботу сервера.
  2. В автозавантаженні цього користувача буде скрипт для завершення роботи.
  3. Користувачам, які будуть віддалено вимикати сервер, дається спеціально підготовлений rdp клієнт, який без всяких запитів буде підключатися за потрібне користувачем, у якого буде спрацьовувати скрипт на завершення роботи.

Все досить просто, але на кожному етапі я стикався з проблемами, які вимагали не тривіального рішення. Але про все по порядку.

Отже, йдемо на північ і створюємо там простий bat файл такого змісту:

Віддалене виключення комп'ютера по мережі

Ось тут я напоровся на перші неприємності. Я назвав свій скрипт shutdown.bat і дуже довго не міг зрозуміти, чому він не спрацьовує. При введенні команди shutdown з параметрами в консолі все відмінно працювало, але скрипт не запускати. Виявляється, його не можна називати таким ім'ям. Після того, як перейменував в shut.bat, все відмінно запрацювало. Якась безглузда заковика, але мені довелося витратити чимало часу, поки я розібрався, у чому тут справа.

Далі заходимо нашим новим користувачем, щоб створилися стандартні папки профілю і кладемо скрипт автоматичного вимкнення сервера йому в автозавантаження - C: \ Users \ shut-user \ AppData \ Roaming \ Microsoft \ Windows \ Start Menu \ Programs \ Startup.

Тепер нам потрібно налаштувати автоматичний вхід користувача по rdp, щоб виконати віддалене завершення роботи. Причому користувач повинен заходити на сервер без запиту імені і пароля. Штатними засобами rdp клієнта windows це зробити неможливо. Навіть якщо ви збережете параметри, то при перенесенні налаштувань на інший комп'ютер потрібно буде знову вводити пароль. Мені це не підходило.

Я пробував використовувати стару Портировать версію rdp 5.2. Це остання версія, де пароль в зашифрованому вигляді можна було зберігати в файлі налаштувань. Але при перенесенні цього файлу на інший комп'ютер, все одно вискакувало вікно з введенням пароля. Домогтися повного автоматизму не виходило.