Как перезагрузить компьютер через удаленный доступ vpn

  • автор:

Удалённое управление питанием и перезагрузкой компьютера, при помощи внешнего девайса

Каждый пользователь компьютера сталкивался хотя бы раз в своей жизни с такой ситуацией: ты ушёл к себе на работу, почти доехал до неё и вдруг вспомнил,- что забыл взять со своего личного компьютера какую-то очень важную вещь.

Ехать обратно — опоздаешь на работу. А ведь ситуация может развиваться и гораздо более драматично: допустим, человек поехал куда-то далеко за рубеж, в отпуск, и там ему приходит важный звонок, по результатам которого ему необходимо передать своему визави,- определённые документы. А документы остались дома! А дом находится за границей!

Или вот ещё такая беда: ваш персональный компьютер является мощной графической станцией, на которой установлено множество тяжёлых программ для работы с графикой, программными продуктами. А вы перемещаетесь по городу, имея в руках всего лишь «тонкий» клиент, в виде ноутбука…

Из этого описания становится понятно, что «тонкий» клиент не обладает соответствующей производительностью, для запуска множества высокопрофессиональных программ и проектов. Да и если даже он у вас достаточно мощный, — это в принципе неудобно, каждый раз синхронизировать проекты с «тонким» клиентом. Как быть в описанных выше ситуациях — мы и поговорим в этой статье.

На самом деле, указанная проблема очень легко решается: установкой на ваш персональный компьютер системы удалённого включения/выключения и перезагрузки. Этот подход позволит всегда иметь под рукой всю мощь вашей домашней машины и все необходимые документы, и проекты, хранящиеся на ней.

До начала описания своей разработки, хочу сказать, что конечно, она не является единственно возможным способом для удалённого включения выключенного компьютера. Например, хорошо известна технология Wake-on-LAN. Суть этой технологии заключается в том, что она позволяет включить выключенный компьютер, отправкой специального пакета на его MAC-адрес.

Сетевой адаптер компьютера, поддерживающего Wake-on-LAN, находится в этот момент в режиме пониженного потребления и анализирует все пакеты на него. Если одним из поступающих пакетов окажется так называемый magic packet, сетевой адаптер выдаст сигнал на включение питания компьютера.

Из минусов данной технологии стоит отметить, что она:

  1. должна поддерживаться аппаратно (например, мой компьютер её не поддерживает, насколько мне известно); некоторые пользователи, наблюдаются проблемы с восстановлением работы, если пропадало напряжение в сети или компьютер вынимали из розетки;
  2. является небезопасной, хотя бы даже из-за этого.

В любом случае, я подумал, что создание девайса, о котором пойдёт дальше речь, будет интересной затеей, так как:

  1. это более безопасно, чем Wake-on-LAN;
  2. можно установить даже на устройства, не поддерживающие Wake-on-LAN;
  3. прошивка устройства снабжена средствами восстановления связи, после пропадания питания/перезагрузки;
  4. позволяет принудительно перезагрузить «зависший» компьютер — удалённо;
  5. в принципе интересно, так как позволяет реализовать новый девайс на esp32, в рамках растущего «интернета вещей».

▍ Итак, приступим.

Некоторое время назад, решение указанной проблемы было достаточно затруднённым: необходимо было обладать достаточно высоким уровнем профессионализма и наличием глубоких знаний в области электроники, чтобы собрать требуемое для решения этой задачи устройство.

С появлением платформы Arduino, данная задача существенно облегчилась, однако, она продолжала оставаться достаточно неудобной в своей реализации, ввиду наличия клубка проводов, соединяющих требуемые компоненты, либо, ввиду необходимости покупки соответствующих wi-fi шилдов.

В текущее же время, этот вопрос ещё более облегчился, из-за появления платы espressif esp32. Для тех, кто не знает, это двухъядерный модуль, содержащий множество необходимых для любого самодельщика свойств. В рамках же данного проекта, нас будет интересовать наличие встроенного wi-fi модуля.

Использование этой платы позволит нам легко и просто построить требуемое устройство, не загромождая всё проводами и за достаточно малую цену. Рискну предположить, что суммарная стоимость компонентов нашего решения не превысит 350-400 руб.

Для того, чтобы создать устройство, нам понадобится всего лишь четыре резистора, два мосфет- транзистора и плата esp32.

  • 2 резистора на 10 кОм, мощностью на 1 ватт или меньше;
  • 2 резистора на 100 Ом, мощностью на 1 ватт или меньше;
  • 2 мосфет-транзистора с логическим уровнем IRLZ44NPBF;
  • 1 модуль микроконтроллера esp32

По набору компонентов, искушённый читатель сразу понял, что мы будем делать: с помощью esp32 мы будем управлять ключами на основе мосфет-транзисторов.

При использовании мосфет-транзистора нужно иметь в виду один нюанс: транзистор должен открыться полностью, если этого не произойдёт, то он в работе будет сильно греться и будет фактически, работать в роли резистора.

В данном конкретном случае, это, конечно, не так важно, так как мы будем коммутировать достаточно малые токи кнопки включения/выключения и reset-a.

Кстати, весьма рекомендую к прочтению хорошую статью про подбор мосфетов.

Конечно, можно не напрягаться и взять релейные модули для ардуино:

Но это не наш путь и вот почему: а) щелчки реле; б) наклёп контактов; в) высокое энергопотребление релейным модулем.

Оно нам надо? Нет, оно нам не надо 🙂

Так как мы хотим сделать «всё красиво» — мы будем использовать специальные мосфеты с логическим уровнем.

В рамках данного проекта, я выбрал мосфет-транзистор IRLZ44NPBF. У него порог срабатывания от 2 Вольт. То, что надо.

Как собрать ключ на мосфете — можно почитать тут.

По поводу конкретных силовых исполнительных устройств более-менее всё понятно. Однако нам ведь нужно ещё и каким-то образом «рулить» esp32 внешнего интернета!

То есть, задача в общем виде представляется следующей: некий интерфейс из внешнего интернета, зная IP адрес esp32, может отдавать ей команды.

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

Да, вы скажете, что IP на самом деле не меняется, он может поменяться, только если кто-нибудь из домашних тоже подключится к сети, в тот момент, пока esp32 перезагружается, и ей придётся взять другой свободный IP.

Как бы там ни было, но все эти частности не важны, так как данный вопрос можно решить намного проще, чем выяснять какой текущий IP у платы и каким образом его сообщить во внешний интернет: для этого мы будем использовать протокол mqtt. Для тех, кто не сталкивался, вкратце можно сказать, что протокол предназначен для интернета вещей, «умного» дома и не только.

Использование протокола позволяет с лёгкостью обойти проблему прохода за роутер (тут следует сделать оговорку, что мы делаем допущение, что большая часть пользователей интернета, которая выходит в сеть, используя персональные компьютеры, имеют дома wi-fi точку доступа в виде роутера).

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

используя смартфон и интерфейс публичного mqtt-клиента , мы оставляем сообщение (цифру 0 или 1 или 2) в соответствующем топике (MoyComp/1 — переименуйте под себя), который постоянно мониторится платой esp32. Пользуясь терминологией протокола mqtt, можно сказать, что «esp32 подписана на соответствующий топик», в котором наш смартфон будет оставлять сообщение, о потребности совершения неких действий.

Значение отправляемых цифр:

0 — «выключить компьютер»;
1 — «включить компьютер»;
2 — «перезагрузить компьютер»;

После того, как сообщение получено платой, она выполняет определённые действия, и отчитывается в другом топике, на который, в свою очередь, подписан смартфон, с которого мы отправили задание. Таким образом, владелец смартфона узнает о том, что плата получила задание и выполнила его.

Как работать с клиентом: при запуске указанного выше mqtt-клиента — мы видим вот это окно. Ничего в нём не меняем, жмём кнопочку «Connect»:


Далее, появится следующее окно, где мы подписываемся на топик, в котором esp32 оставит сообщение о выполнении задания. Для этого жмём Add new topic subscription:


Вводим топик и жмём «Subscribe»:

Топик, на который мы подписались — появился справа, наверху:


Теперь, мы можем ввести топик, в который надо отправить сообщение и собственно, сообщение. И жмём «Publish». Сообщение уехало на esp32, и она отчиталась внизу, о выполнении задания:


То есть, для работы всей системы нужны:

  • компьютер с установленной в него сборкой на базе esp32;
  • точка доступа wifi (домашний роутер);
  • MQTT-брокер;
  • публичный MQTT-клиент (который мы запускаем на смартфоне).

image
Источник картинки: wikihandbk.com

И работает оно так (текст оттуда же):

  • ESP32 #1 подключена к светодиоду и считывает температуру с датчика DS18B20;
  • ESP32 #2 подключена к кнопке, и нажатие на неё будет включать/выключать светодиод, подключённый к ESP32 #1;
  • ESP32 #2 подключена к LCD-дисплею (передающему данные по I2C), на котором будут печататься данные о температуре, полученные от ESP32 #1
  • ESP32 #1 подписана на топик «esp32/led» и публикует данные о температуре в топик «esp32/temperature»;
  • При нажатии на кнопку, подключённую к ESP32 #2, эта плата будет публиковать соответствующее сообщение в топик «esp32/led», с помощью которого управляется светодиод, подключённый к ESP32 #1;

Модифицируем её для нашего случая:

Прошивка проекта написана в Arduino IDE и доступна на моём гитхабе.

Пробежимся по основным моментам.

В своей работе мы будем использовать публичный mqtt broker по адресу: broker.hivemq.com:

Вы можете использовать любой другой — это вопрос исключительно предпочтений. Я выбрал этот и он у меня заработал. А так как я обычно иду по пути наименьшего сопротивления (в рамках парадигмы «и так сойдёт!» ), то искать что-то иное не было смысла. Ибо любая минута поиска — воровала у меня время, которое я мог бы с пользой провести, лёжа на диване, с думами о вечном :-))).

Для начала мы в блоке изначальной инициализации переменных указываем порт для подключения к mqtt брокеру, при необходимости — имя пользователя и его пароль(или имя и пароль оставляем пустыми, если брокер публичный — как в нашем случае):

Далее мы указываем два топика, — один из которых для публикации статуса компьютера в данный момент (то есть компьютер включён/выключен, или перезагружается):

Именно туда esp32 выводит строгие и выверенные системные сообщения, о происходящем с компьютером:

Другой, для получения сообщений из внешнего интернета(сюда мы постим со смартфона цифры 0, 1 или 2, в зависимости от которых выключается/включается/перезагружается компьютер):

Для подключения мосфет-транзисторов, я использовал пины, под номерами 19 и 21. Вы можете использовать, в принципе, любые допустимые пины, хорошее описание которых содержится по следующему адресу.

Из ещё одного интересного момента можно рассмотреть следующие три переменные:

В них мы задаем время в миллисекундах, в течение которого наше устройство будет держать нажатой соответствующую кнопку. Данные переменные вам нужно определить самостоятельно, опытным путём(если мои значения не будут работать)- для вашего конкретного компьютера, так как, вероятно, они могут отличаться в вашем конкретном случае. В прошивке значения переменных указаны для моего случая.

Ещё одним любопытным моментом, который некоторые могут не знать, является то, что встроенный в esp32 светодиод привязан к пину, под номером 2. Я решил, что «инженерия инженерией, но и красотень тоже должна быть». Поэтому наша esp-шка будет мигать встроенным светодиодом:

Теперь, что касается питания нашей сборки на esp32: единственный более-менее комфортный способ это осуществить,- запитать нашу сборку от дежурного питания компьютера. Так как наша сборка потребляет совсем немного, её подключение к дежурному питанию не должно вызвать проблемы с невозможностью включения компьютера из-за просадки напряжения.

А далее, когда компьютер включён — можно подключиться к нему, с помощью предварительно настроенных программ удалённого администрирования, удалённого рабочего стола и т.д. и т.п.

Ну, вот на этом кажется и всё. Ещё раз только остановлюсь на том факте, что вся эта идея со сборкой системы для удалённого управления компьютером была продиктована не только, и не столько потребностью в доступе к файлам (потому что, как альтернативу, можно купить в таком случае NAS), а скорее даже необходимостью иметь возможность доступа к своему пулу рабочих программ, которые установлены только на домашнем компьютере.

Как удаленно перезагрузить или выключить компьютер через удаленный рабочий стол (RDP)

Как удаленно перезагрузить или выключить компьютер через удаленный рабочий стол (RDP)

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

remote_reboot01

Способ 1: Горячие клавиши Alt + F4

Решение достаточно простое — необходимо воспользоваться горячими клавишами Alt + F4 , после чего появится меню с предложением завершения работы, где можно выбрать в том числе и перезагрузку.

remote_reboot02

Способ 2: Командная строка

Кроме этого, никто не отменял использование командной строки. Команды для выключения или перезагрузки компьютера следующие:

Кроме этого, можно использовать ключ -t, с помощью которого можно задать время, через которое произойдет завершение работы. Например команда ниже перезагрузит компьютер через 2 минуты (задается время в секундах).

Способ 3: Горячие клавиши Ctrl + Alt + End

Также, работая через удаленный рабочий стол, можно вызвать меню, аналогичное нажатию Ctrl+Alt+Del на локальном компьютере — для этого нужно нажать клавиши Ctrl + Alt + End (подробней про эти клавиши можно прочитать в этой статье). После вызова данного меню, в правом нижнем углу будут доступна кнопка для выключения или перезагрузки компьютера (на картинке ниже, отмечено оранжевым цветом).

Записки IT специалиста

Админу на заметку — 17. Как выключить или перезагрузить компьютер через RDP

  • Автор: Уваров А.С.
  • 27.11.2015

rdp-shutdown-000.jpgУдаленный доступ к рабочему столу по протоколу RDP широко используется для работы не только с серверами, но и с рабочими станциями, как для удаленной работы, так и в целях администрирования. Однако есть некоторые ограничения, в частности в среде клиентской ОС нельзя управлять параметрами питания, даже имея права локального администратора. В некоторых случаях это способно взывать затруднения, поэтому если вы до сих пор не знаете, как выключить или перезагрузить клиентскую версию ОС через RDP — эта статья для вас.

Научиться настраивать MikroTik с нуля или систематизировать уже имеющиеся знания можно на углубленном курсе по администрированию MikroTik. Автор курса, сертифицированный тренер MikroTik Дмитрий Скоромнов, лично проверяет лабораторные работы и контролирует прогресс каждого своего студента. В три раза больше информации, чем в вендорской программе MTCNA, более 20 часов практики и доступ навсегда.

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

rdp-shutdown-001.jpg

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

rdp-shutdown-002.jpg

Несмотря на кажущуюся нелогичность, определенный смысл в таком поведении есть. Серверные ОС администрируют профессионалы (как минимум в теории), которые должны отдавать себе отчет о возможных последствиях своих действий. С другой стороны, удаленно выключив ПК так просто включить его уже не получится, в большинстве случаев потребуется физическое присутствие, поэтому решение убрать подобную функцию от простых пользователей выглядит вполне обоснованно. Администраторы, следуя этой логике, должны уметь управлять питанием и иными способами.

Но как показывает практика, умеют это не все. Ничего страшного в этом нет, как говорил мой школьный учитель: спросить — стыд минуты, не знать — стыд всей жизни.

Графическая оболочка

На самом деле «проблема» решается не просто, а очень просто. Выйдя на рабочий стол достаточно нажать Alt+F4 чтобы получить стандартный диалог завершения работы.

rdp-shutdown-003.jpg

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

rdp-shutdown-004.jpg

Беда в том, что этого экрана через RDP вы уже не увидите. Да и открытые приложения — это полбеды, хуже, когда систему не дает выключить или перезагрузить зависшее приложение. В этом случае придется искать иные методы.

Командная строка

Как обычно, если графические инструменты не помогают, на помощь администратору приходит командная строка. Для того, чтобы управлять питанием компьютера с ее помощью не надо обладать особыми знаниями, достаточно запомнить одну простую команду. Нажмите Win+R или Пуск — Выполнить и введите следующие команды:

rdp-shutdown-005.jpg

Разберем ключи команды подробнее:

  • s — выключение компьютера
  • r — перезагрузка
  • f — принудительное завершение мешающих перезагрузке процессов
  • t — время, через которое завершение работы будет выполнено, указывается в секундах через пробел. Если данный параметр не используется команда будет выполнена через 60 секунд.

Утилита PsShutdown от Sysinternals

Если штатные возможности вас по какой-либо причине не устраивают, то можно воспользоваться альтернативой — утилитой PsShutdown от Sysinternals. Разместите скачанный файл в любом удобном месте, лучше всего в одном из указанных в переменной PATH, либо добавьте туда ее расположение, это позволить запускать ее по короткому имени, без указания пути. Синтаксис утилиты похож на синтаксис стандартной, но есть некоторые отличия, так для выключения выполните:

а для перезагрузки:

Поясним используемые ключи:

  • k — выключение системы
  • r — перезагрузка
  • f — принудительное завершение процессов
  • t — время выполнения команды

Если вместо ключа -k использовать для выключения ключ -s, то система завершит работу без выключения питания, старожилы должны хорошо помнить:

rdp-shutdown-006.jpg

Кроме того, данная утилита позволяет управлять питанием других ПК по сети. Если честно, то работать по сети умеет и штатная утилита shutdown, достаточно указать ключ:

Но есть один существенный недостаток — команда выполняется в контексте запустившего его пользователя, поэтому вы из дома не сможете выключить рабочий ПК, даже имея доступ в корпоративную сеть через VPN и имея учетные данные администратора сети.

PsShutdown данного недостатка лишена и позволяет указывать учетные данные для подключения к удаленному ПК, например:

Данная команда выполнит перезагрузку удаленного ПК computer использовав для подключения имя username и пароль password. Следует помнить, что указанный вами пользователь должен иметь права доступа к административному ресурсу ADMIN$. В среде Active Directory этим правом обладает администратор домена, а вот в одноранговой сети могут возникнуть затруднения.

Если вы попробуете выключить удаленную систему даже с использованием учетных данных локального администратора, то скорее всего получите ошибку Отказано в доступе.

rdp-shutdown-007.jpg

Это свидетельствует о том, что данный пользователь не имеет доступа к ресурсу ADMIN$. Чтобы его включить нужно выполнить два условия: включить общий доступ к файлам и принтерам

rdp-shutdown-008.jpg

А затем в ветвь реестра

добавить параметр типа DWORD с именем

и установить его значение равным 1. После этого компьютер потребуется перезагрузить.

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

rdp-shutdown-009.jpg

Как видим в этот раз команда отработала успешно.

PowerShell

Использовать PowerShell для выключения или перезагрузки компьютера, это сродни стрельбы из пушки по воробьям, но в ряде случаев может оказаться полезным.

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

А для перезагрузки:

Ключ -Force в данном случае аналогичен ключу -f команды shutdown и предполагает принудительное завершение работы мешающих выключению приложений.

Также PowerShell можно использовать для управления питанием по сети, например, можно выключить удаленный ПК командой:

  • ComputerName — имя удаленного компьютера, допускается перечисление нескольких имен через запятую
  • Credential — имя учетной записи для аутентификации в удаленной системе

При этом работа через PowerShell более безопасна, так как пароль не вводится открытым текстом и не остается в истории команд. Для аутентификации используются стандартные механизмы ОС.

rdp-shutdown-010.jpg

Как видим, для управления питанием в ОС Windows доступны самые разнообразные инструменты — на любой вкус и цвет. При этом все они доступны внутри терминальной сессии, какой из них использовать — дело личного вкуса и предпочтений.

Научиться настраивать MikroTik с нуля или систематизировать уже имеющиеся знания можно на углубленном курсе по администрированию MikroTik. Автор курса, сертифицированный тренер MikroTik Дмитрий Скоромнов, лично проверяет лабораторные работы и контролирует прогресс каждого своего студента. В три раза больше информации, чем в вендорской программе MTCNA, более 20 часов практики и доступ навсегда.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *