Статья

Удаленное выключение и включение компьютера через HomeBridge, а так-же через HomeAssistant

После того, как вникаешь в тему автоматизации умных домов, становиться интересно "Чем же еще можно управлять?". После этого вопроса, в голове формируется целый список устройств, которые есть у вас дома и конечно всем этим хочется управлять. В этой статье я расскажу, как вам автоматизировать удаленное выключение и включение вашего компьютера с помощью HomeBridge или HomeAssistant.

У не которых возникает вопрос, "а зачем мне это нужно?". На этот вопрос каждый найдет свой ответ…. Кому-то может лень с места вставать, а кому-то как мне, надо по сценарию выключать все устройства перед сном. Казалось бы, очень простая задача и в интернете можно найти много информации как это сделать, но поверьте мне, после долгих мучений на нескольких компьютерах, я выявил очень много нюансов и попытаюсь об этом подробно рассказать.

Займёмся предварительной подготовкой Raspberry

Установкой HomeBridge или HomeAssistant на малину, мы не будем заниматься. На сайте подобные статьи уже есть.

Поехали... Сначала установим утилиту Samba на Raspberry, чтобы можно было обращаться к ресурсам SMB и CIFS с ОС Windows, а также ОС MacOS для наших нужд. 

Обновим индексы репозиторий:

sudo rm -Rf /var/lib/apt/lists sudo apt-get update -y sudo apt-get upgrade -y

Затем устанавливаем Samba:

sudo apt-get install samba samba-common-bin -y

Ставим пакет "sshpass", для автоматического входа из командной строки по паролю. Для более любопытных, подробнее здесь

sudo apt install sshpass -y

На этом наша подготовка Rasppbery закончена.

Предварительно подготовим и компьютер, которым будем управлять.

Для компьютеров с ОС Windows

Запустите командную строку от имени администратора, это можно сделать через меню правого клика по кнопке "Пуск" или как показано на скриншоте.

Важный момент ! Включенный UAC (User Account Control) блокирует удаленный доступ по WMI на компьютере. По этому отключаем эту ни кому не нужную защиту.

Далее, для удобства, все действия будут выполняться из командной строке Windows. И так, поехали...

Для начала создаем новую учетную запись, например, "PowerControl", которую будем использовать для одной единственной задачи – удалённое выключение компьютера. Так же задаем ему какой-нибудь пароль, скажем 12345678 и для удобства скрываем его полностью из системы.

net user PowerControl 12345678 /add net user PowerControl /expires:never reg add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\SpecialAccounts\UserList" /v "PowerControl" /t REG_DWORD /d "0" /f :::: Готово ::::

Чтобы удобно было копировать команды, соберу их сразу вместе с комментированием в консоли. Все что вам нужно сделать, это одним разом скопировать все и вставить в консоль командной строки Windows.

:::: Включаем службу Сервер (445 порт) и счетчики производительности сетевых служб. sc config LanmanServer start= auto LODCTR /E:PerfNet :::: Разрешим протокол связи DCOM reg add "HKLM\SOFTWARE\Microsoft\Ole" /v "EnableDCOM" /t REG_SZ /d "Y" /f :::: Создадим ключ LocalAccountTokenFilterPolicy в реестре reg add "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System" /v "LocalAccountTokenFilterPolicy" /t REG_DWORD /d "1" /f :::: Включаем службу для удаленного реестра Windows sc config RemoteRegistry start= auto sc start RemoteRegistry :::: Разрешаем через брандмауэр Windows передавать данные WMI :::: Вручную делается это так... Открываем "Панель уаправления" -> "Система и безопасность" -> "Брандмауэр Windows" -> "Разрешить запуск программы или компонента через брандмауэр Windows". Выбираем "Иструментарий управления Windows" (WMI) и жмем на кнопку Сохранить. :::: но мы будем это делать из командной строки вот так: netsh advfirewall firewall set rule group="Инструментарий управления Windows (WMI)" new enable=Yes :::: Включим в оснастке брандмауэра исключения для "Удаленное управление Windows". netsh advfirewall firewall set rule group="Удаленное управление Windows" new enable=Yes :::: готово ::::

Теперь настроим политику безопасности для принудительного удаленного завершения работы.

Нажимаем на кнопку "Пуск",  в поиске вводим secpol.msc и жмем на клавишу Enter.

В левой колонке, открывшегося окна видим раздел под названием "Параметры безопасности", в нем открываем "Локальные политики" и переходим в раздел под названием "Назначение прав пользователей", находим и открываем пункт "Принудительное удаленное завершение работы". Здесь надо добавить учетную запись PowerControl. Нажимаем на кнопку "Добавить пользователя или группу... ", вводим PowerControl, жмем OK и еще раз OK.

Теперь надо написать команду, при послании которого, будет завершена работа удаленного компьютера в локальной сети:

Чтобы проверить правильность команды, в командной строке Rasppbery, вводим :

sudo net rpc shutdown -f -t 5 -C 'Message' -U user%password -I XXX.XXX.XXX.XXX

Значения ключей запуска команды shutdown:

-f - принудительно завершает работу системы;-r - если заменить ключ -f на -r, то  вместо завершения работы произойдет перезагрузка;
-t 5 - время в секундах, после которого операционная система выполнит команду по ключу -f, либо -r;-C "Message" - текст сообщения, который будет выведен на экран при выполнении команды по ключу -f, либо -r;-U user%password - логин и пароль пользователя. Из примера, это будет "PowerControl%12345678";-I XXX.XXX.XXX.XXX - IP-адрес выключаемого компьютера;-p 445 - порта, прослушиваемый SMB, либо CIFS подсистемой (необязательный параметр, без него вначале прослушивается 445 порт, а после 139).еще больше команд можно посмотреть здесь

Возможные уведомления от сервера:

При успешном подключении к удалённой системе и выполнении команды, увидим следующее уведомление:

shutdown of remote machine succeeded

А если у пользователя нет достаточных прав для выполнения команды, появиться следующее уведомление:

Could not initialise pipe winreg. 

Error was NT_STATUS_OBJECT_NAME_NOT_FOUND

ну а в случае, если система не принимает подключений, то вылезет такое:

Could not connect to server xxx.xxx.xxx.xxx...

На этом настройка для удалённого выключения компьютера под ОС Windows завершена, но мы еще не настроили удаленное включение... Так что перезагружаемся и продолжаем дальше.

В конце статьи Вы поймете почему этот текст зачеркнут!

Для компьютеров с ОС Linux, в том числе Raspbian

Ну что-же, как и в случае с Windows, также и в ОС Linux заведем специальную учетную запись пользователя для удаленного отключения или перезагрузки вашего ПК.

Все ниже указанные команды в основном требуют root-доступ, поэтому лучше запускать команды из-под учетной записи root или через sudo.

Наберем команду и получим права суперпользователя для выполнения команд (Необходимо будет вводить свой пароль)

sudo -i

Приступим к созданию нового пользователя под названием "PowerControl":

sudo useradd PowerControl

Задаем пользователю пароль, а то не сможем авторизоваться по ssh:

sudo passwd PowerControl

Опять же, чтобы удобно было копировать команды, соберу их сразу вместе с комментированием в консоли. Вам остается только одним разом все скопировать и вставить в консоль командной строки.

#### Создаем домашний каталог: sudo mkdir /home/PowerControl #### Перемещаем папку пользователя в скрытый каталог === sudo mv /home/PowerControl /var/PowerControl #### Присваиваем папку пользователя к учетной записи === sudo usermod PowerControl -d /var/PowerControl #### Делаем владельцем каталога пользователя "PowerControl" sudo chown PowerControl /var/PowerControl #### Меняем права доступа каталога: sudo chmod 500 /var/PowerControl #### готово ####

Для скрытия пользователя, введем команду и создадим файл с именем пользователя PowerControl

sudo nano /var/lib/AccountsService/users/PowerControl

В открывшемся файле, вводим ниже уазанный текст

[User] SystemAccount=true

После чего, жмем сначала на комбинацию клавиш CTRL+O, а потом CTRL+X чтобы сохранить изменения.

Отлично! Теперь ограничим доступ учетной записи "PowerControl", разрешим ему управлять только командой shutdown, при этом без ввода пароля. Для этого надо будет отредактировать файл sudoers.

Внимание! Любая ошибка в sudoers, выведет из строя сам sudo. Редактирование этого файла, делается только с помощью команды "visudo" и ничем другим! 

Хватит слов! Перейдем к делу, открываем sudoers следующей командой:

sudo visudo

Добавляем следующую строку:

PowerControl ALL=(ALL) NOPASSWD: /sbin/shutdown

Теперь настроим команду по управлению питанием удаленного компьютера в локальной сети. Чтобы завершить работу системы или же перезагрузить, воспользуемся командой shutdown.

Чтобы проверить правильность команды, вводим его в командную строку Rasppbery:

sudo sshpass -p 'password' ssh -oStrictHostKeyChecking=no user@XXX.XXX.XXX.XXX sudo shutdown -r now

Значения ключей запуска команды shutdown:

password - пароль пользователя. Из примера, это будет "12345678";
user%XXX.XXX.XXX.XXX - логин и IP-адрес выключаемого компьютера. Из примера, логин будет "PowerControl";-h - Остановить и завершить работу системы;-H - Просто остановить систему;
-P - Отключить питание системы;
-r - если заменить ключ -h на -r, то  вместо остановки и завершения работы произойдет перезагрузка;

Оставлю список команд которое вернет назад все ваши проделанные действия!

sudo userdel PowerControl sudo rm -rf /var/PowerControl sudo rm -rf /home/PowerControl sudo rm -rf /var/lib/AccountsService/users/PowerControl sudo groupdel PowerManager

Для компьютеров с ОС MacOS

Вот и по тихой руки дошли и до MacOS. Логика та же, заводим специальную учетную запись пользователя для удаленного отключения или перезагрузки вашего ПК, как и в случае с Windows и ОС Linux.

Так же как и в ОС Linux, все ниже указанные команды надо запускать из-под учетной записи root или через sudo, так как команды в основном требуют root-доступ. 

Открываем терминал и вводим команду, для получения прав суперпользователя. (Понадобиться ввести пароль от вашей учетной записи.)

sudo -i

Создаем нового пользователя под названием "PowerControl" и задаем пароль, скажем "12345678" :

sudo sysadminctl -addUser PowerControl -password 12345678

Здесь опять же, для вашего удобства, все действия минимизированы. Скопируйте команды и вставьте в терминал.

# === Перемещаем папку пользователя в скрытый каталог === sudo mv /Users/PowerControl /var/PowerControl # === Присваиваем папку пользователя к учетной записи === sudo dscl. create /Users/PowerControl NFSHomeDirectory /var/PowerControl sudo dscl. delete "/SharePoints/PowerControl's Public Folder" # == Делаем владельцем и меняем права каталога === sudo chown PowerControl:PowerManager /var/PowerControl sudo chmod 500 /var/PowerControl # === Скрываем учетную запись и поле входа "Other..." === sudo defaults write /Library/Preferences/com.apple.loginwindow HiddenUsersList -array-add PowerControl sudo defaults write /Library/Preferences/com.apple.loginwindow SHOWOTHERUSERS_MANAGED -bool false # === Включение удаленного входа по SSH sudo launchctl load -w /System/Library/LaunchDaemons/ssh.plist # === Удаляем ранее созданию группу для ограничения доступа dseditgroup -o delete -t group com.apple.access_ssh # === Создадим группу для ограничения доступа sudo dseditgroup -o create -q com.apple.access_ssh # === Разрешим удаленный доступ пользователю sudo dseditgroup -o edit -t user -a PowerControl com.apple.access_ssh # готово #

Давайте теперь ограничим учетную запись "PowerControl" и разрешим ему управлять только командой shutdown без ввода пароля. Для этого, как и в ОС Linux отредактируем файл sudoers.

Внимание! Еще раз предупрежу! Любая ошибка в sudoers, выведет из строя сам sudo. Редактирование этого файла, делается только с помощью команды "visudo" и ничем другим! 

Сразу скажу что в macOS редактор не такой как в ОС Linux, поэтому прошу делать ровно ,так, как расписано ниже.

Клавиатура должна быть переключена на английскую раскладку.. 

Если раньше уже редактировался sudoers, то при попытке открыть его может выйти предупреждение как на скриншоте. Беспокоиться не надо, просто нажимаем на клавишу "E".

Итак, открываем sudoers следующей командой:

sudo visudo

Клавишей "Вверх/Вниз" находим раздел со строкой

# root and users in group wheel can run anything on any machine as any user

и нажимаем на клавишу "i", после чего должна появиться снизу надпись "--INSERT--".

Ниже находим

%admin          ALL = (ALL) ALL

и после него добавляем

PowerControl ALL=(ALL) NOPASSWD: /sbin/shutdown

Нажимаем на клавишу "ESC", должна пропасть надпись "--INSERT--" и набираем :wq

Команду :wq НЕНАДО КОПИРОВАТЬ!!! Его надо вручную вводить после чего нажать на клавишу "Enter"

На этом подготовительная настройка macOS завершена, но я знаю что у вас остался один вопрос, насчет команды по которой и будет управляться питание удаленного компьютера в локальной сети. Команда та-же, что и в ОС Linux, именно поэтому я все время его и упоминал...

sudo sshpass -p 'password' ssh -oStrictHostKeyChecking=no user@XXX.XXX.XXX.XXX sudo shutdown -r now

Оставлю список команд которое вернет назад все ваши проделанные действия!

# === Возвращаем скрытые учетные записи === # sudo defaults delete /Library/Preferences/com.apple.loginwindow HiddenUsersList # === Удаляем пользователя и группу === # sudo sysadminctl -deleteUser PowerControl sudo dseditgroup -o delete PowerManager # === Выключение удаленного входа (SSH) === # sudo launchctl unload /System/Library/LaunchDaemons/ssh.plist # === Очищаем и Удаляем dseditgroup === # sudo dseditgroup -o edit -t user -d PowerControl com.apple.access_ssh sudo dseditgroup -o edit -d PowerManager -t group com.apple.access_ssh sudo dseditgroup -o delete -t group com.apple.access_ssh exit # готово #

Перейдем к настройкам HomeBridge и HomeAssistant

Ниже я расскажу как настроить и HomeBridge и HomeAssistant, а чем именно пользоваться, этот выбор уже за вами...

Для HomeBridge, установим плагин homebridge-wol. Далее в  конфигурациях находим разделе "accessories" и дописываем это

{ "accessory": "NetworkDevice", "name": "Имя вашего компьютера", "mac": "MAC-адрес вашего компьютера", "ip": "IP-адрес вашего компьютера", "shutdownCommand": "Команда для выключения вашего компьютера" },

Для HomeAssistant, открываем файл настроек configuration.yaml и в конце дописываем это :

switch: - platform: wake_on_lan name: Имя вашего компьютера mac_address: MAC-адрес вашего компьютера host: IP-адрес вашего компьютера turn_off: service: shell_command.turn_off_mypc shell_command: turn_off_mypc: "Команда для выключения вашего компьютера"

Слишком много времени требуется для изучения возможных настроек на разных операционных системах и железок, а еще больше чтобы написать статью. Пока что время не позволяет, но совсем скоро я дополню эту статью и распишу способы удаленного включения вашего компьютера на разных операционных системах. Если вам понравилась статья, то поддержите хотя бы лайком. Это дает стимул, для творчества...


Спасибо за статью, хочется Маком поуправлять, но знаю что сложно. Ждем продолжения

Скоро про это тоже будет. Сначала надо потестить, насколько все правильно работает...

Обновлено! Теперь можно и маком управлять!

Спасибо! Жду продолжения! Давно над подобной задачей бьюсь!!! Очень актуально))) Буду тестит на своих серверах, дам фидбэк!

Чтобы не создавать дыры в системе, надо применять правильные методы , а то по интернету если посмотреть аналогичные методы по перезагрузке, то можно заметить что везде, в командах  применяется в открытом тексте основной логин и пароль..

sudo groupadd PowerManager


sudo usermod -G powermanager PowerControl


Вторую команду выполнить не получалось, пока не прописал powermanager как в строке создания группы - PowerManager и со строчкой crown тоже самое

Но все равно в итоге ничего не получается в Putty - ssh: connect to host 192.168.2.111 port 22: Connection timed out

Статью обновил, теперь без группы, добавил список команд которое вернет назад все проделанные действия! после чего еще раз можешь сделать уже по новой инструкции без группы

Что то у меня не очень получилось.

вот что выдает homebridge при попытке выключить компьютер

[1/31/2019, 2:04:30 PM] [PC Win10] NetworkDevice "PC Win10" (10.0.1.100) went from status "Shutting Down" to "Online" 

[1/31/2019, 2:04:38 PM] [PC Win10] NetworkDevice shutdown cycle started for "PC Win10" (10.0.1.100) 

[1/31/2019, 2:04:38 PM] [PC Win10] Attempting to shut down "PC Win10" (10.0.1.100) using "sudo net rpc shutdown -f -t 5 -C 'Message' -U PowerControl%12345678 -I 10.0.1.100"
[1/31/2019, 2:04:38 PM] [PC Win10] NetworkDevice "PC Win10" (10.0.1.100) went from status "Online" to "Shutting Down" 

[1/31/2019, 2:04:38 PM] [PC Win10] An error occured while trying to shut down "PC Win10" (10.0.1.100): Error: Command failed: sudo net rpc shutdown -f -t 5 -C 'Message' -U PowerControl%12345678 -I 10.0.1.100
/bin/sh: sudo: not found

HomeBridge установлено на NAS Synology (

DSM 6.2.1-23824 Update 2 ).

Может кто-нибудь помочь?

Попробуй на прямую набрать в консоли Linux.

Пытаюсь повторить...

  1. 1 Затык после команды: sudo usermod PowerControl -d /var/PowerControl

usermod: изменения не внесены

2. Пытаюсь тестовый перезагруз сделать.  

sudo sshpass -p '12345678' ssh -oStrictHostKeyChecking=no PowerControl@192.168.61.101 sudo shutdown -r now

ssh: connect to host 192.168.61.101 port 22: Connection refused

В чём ошибка.... ? OS Linux Mint


Вернуться назад
Вернуться назад