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

Обновлено: 03.07.2024

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

Если у вас есть желание научиться строить и поддерживать высокодоступные и надежные системы, рекомендую познакомиться с онлайн-курсом «DevOps практики и инструменты» в OTUS. Курс не для новичков, для поступления нужно пройти .

Причем выключать по сети нужно как windows серверы, так и linux различных дистрибутивов - ubuntu, centos, freebsd. То есть решение должно быть простое и надежное.

Дистанционное выключение Windows сервера

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

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

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

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

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

Итак, идем на север и создаем там простой bat файл следующего содержания:

Сохраняем файл и создаем пользователя, под которым будем выключать сервер. Не забудьте добавить этому пользователю разрешение подключаться по rdp. Если вы выключаете компьютер с десктопной системой, то прав обычного пользователя достаточно. Если же вам надо погасить Windows Server, то пользователя нужно либо сделать админа, либо дать ему права на разрешение выключение сервера через локальную политику безопасности. Живет эта политика по адресу - параметры безопасности - локальные политики - назначение прав пользователей - завершение работы системы.

дистанционное завершение работы windows

Вот тут я напоролся на первые неприятности. Я назвал свой скрипт shutdown.bat и очень долго не мог понять, почему он не срабатывает. При вводе команды shutdown с параметрами в консоли все отлично работало, но скрипт не запускался. Оказывается, его нельзя называть таким именем. После того, как переименовал в shut.bat, все отлично заработало. Какая-то нелепая загвоздка, но мне пришлось потратить немало времени, пока я разобрался, в чем тут дело.

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

Теперь нам нужно настроить автоматический вход пользователя по rdp, чтобы выполнить удаленное завершение работы. Причем пользователь должен заходить на сервер без запроса имени и пароля. Штатными средствами rdp клиента windows это сделать невозможно. Даже если вы сохраните параметры, то при переносе настроек на другой компьютер нужно будет снова вводить пароль. Мне это не подходило.

Я пробовал использовать старую портированную версию rdp 5.2. Это последняя версия, где пароль в зашифрованном виде можно было хранить в файле настроек. Но при переносе этого файла на другой компьютер, все равно выскакивало окно с вводом пароля. Добиться полного автоматизма не получалось.

Но решение было найдено. Существует любопытный проект Remote Desktop Plus, который является надстройкой над rdp. С помощью этой надстройки можно передать параметры в rdp через командную строку, в том числе и имя пользователя с паролем. Мне это полностью подходит. Скачиваем файлик rdp.exe либо с сайта автора проекта, либо с моего. Я скопировал на всякий случай эту очень полезную утилиту. Кладем его в папку и создаем в этой же папке rem-shut.bat файл следующего содержания:

10.10.5.14 адрес удаленного сервера
shut-user пользователь rdp от имени которого будет происходить выключение
pass123 пароль пользователя
640 480 параметры разрешения экрана, можно не указывать

Всего этого достаточно, чтобы выполнить дистанционное завершение работы на windows сервере. Пользователю необходимо передать 2 файла:

Важно, чтобы они лежали в одной папке. При запуске батника произойдет подключение rdp пользователя и выполнится скрипт завершения работы. Задача выполнена.

Удаленное выключение linux сервера

Здесь все оказалось значительно проще. Сразу же было найдено рабочее решение, которое позволяет без проблем удаленно выключить любой linux сервер. Задача решается стандартными средствами putty. Эту программу можно запускать из командной строки с параметрами. В качестве параметров можно указать файл с командами для выполнения, адрес сервера, пользователя и пароль.

Подготовим все необходимое. Сначала создаем простой текстовый документ shutdown.txt следующего содержания:

Дальше создаем bat файл serv-rem-shut.bat с таким содержимым:

shutdown.txt текстовый файл с командой на отключение
22 номер порта ssh
root имя пользователя, от которого будет выполняться команда на удаленное выключение, лучше создать отдельного
rootpass пароль этого пользователя
10.10.5.15 адрес linux сервера

Передаем пользователю 3 файла, сложенные в одну папку:

  • putty.exe
  • shutdown.txt
  • serv-rem-shut.bat

Теперь при запуске скрипта serv-rem-shut.bat серверу по сети будет отправлена консольная команда на завершение работы. При этом не будет задано никаких вопросов. Сервер просто молча выключится.

Заключение

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

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

Выключаем компьютер удаленно

Для того, чтобы иметь возможность завершать работу ПК удаленно, вам не потребуется дополнительное ПО. Windows уже имеет в версиях «Профессиональная» и «Максимальная» все необходимые функции.


Откройте окно «Выполнить», нажав комбинацию клавиш «Win+R» на компьютере, которым вы хотите управлять. Введите «gpedit.msc» (без кавычек) и подтвердите нажатием «Enter».

В открывшемся окне в разделе «Конфигурация компьютера» перейдите к строке «Конфигурация Windows» и нажмите на строке «Параметры безопасности».

Удаленное выключение. В групповой политике Windows можно настроить функцию дистанционного выключения ПК через сеть

Удаленное выключение. В групповой политике Windows можно настроить функцию дистанционного выключения ПК через сеть

В правой части зайдите в «Локальные политики | Назначение прав пользователя» и дважды щелкните по «Принудительное удаленное завершение работы». Внизу нажмите на кнопку «Добавить пользователя или группу…» и в поле добавления имен напишите «Все» без кавычек.

Подтвердите все изменения, нажав «ОК». Перезагрузите ПК.

Теперь вы можете использовать свой компьютер для удаленного выключения другого компьютера из домашней сети. Для этого откройте «Выполнить», нажав «Win+R», введите «cmd» и подтвердите нажатием «Enter».

Введите команду «shutdown -s -t 10 -m \имя компьютера», чтобы выключить другой компьютер через десять секунд. Если необходимо задать временной промежуток в пять минут, то команда будет выглядеть так: «shutdown — s — t 300 -m \имя компьютера».

Вместо имени ПК можно указать IP-адрес, например: «shutdown -s — t 300 -m \192.168.1.12».


SHUTDOWN – перезагрузка / выключение Windows через командную строку

Команда SHUTDOWN используется для перезагрузки / выключения локального и удаленного компьютера с ОС Windows через командную строку.

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

- перезагрузка удаленного компьютера через локальную сеть;

- перезагрузка компьютера из удаленного RDP сеанса;

- выключение удаленного компьютера через локальную сеть;

- выключение компьютера из удаленного RDP сеанса;

- перезагрузка \ выключение компьютера по расписанию.

Команда shutdown позволяет перезагружать / выключать Windows компьютер через командную строку и является очень полезной в арсенале системного администратора.

Давайте рассмотрим, как пользоваться командой shutdown. Вот какой у неё синтаксис:

Без аргументов - Вывод справки по использованию (как и -?)

shutdown -i - Отображение графического интерфейса пользователя для удаленного завершения работы.

shutdown perezagruzka vyklyuchenie windows cherez komandnuyu stroku1

shutdown -l - Выход (не совместим с параметром -m)

shutdown -s - Завершение работы компьютера

shutdown -r - Перезагрузка компьютера

shutdown -a - Прекращение завершения работы системы

shutdown -m \\<компьютер> - Удаленный компьютер, на котором выполняется действие

shutdown -t xx - Таймаут завершения работы - xx сек.

shutdown -c "comment" - Комментарий (не более 127 знаков)

shutdown -f - Принудительное завершение приложений без предварительного предупреждения

shutdown -d [u][p]:xx:yy - Код причины завершения работы (u - пользовательский код, p - код запланированного завершения, xx - основной код причины (1 - 255), yy - дополнительный код причины (1 - 65535))

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

Немедленная перезагрузка через командную строку:

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

shutdown –r –m \\192.168.0.85 –t 30 –c “ВАШ КОМПЬЮТЕР БУДЕТ ПЕРЕЗАГРУЖЕН ЧЕРЕЗ 30 СЕКУНД! ПРОСИМ ЗАКРЫТЬ ВСЕ ПРОГРАММЫ С СОХРАНИЕМ ИЗМЕНЕНИЙ.”

В этой статье рассказывается, как удаленно завершать работу или перезагружать ПК с Windows 10/8/7 с помощью диалогового окна «Удаленное выключение» или командной строки. Используя Диалог удаленного выключения и параметры выключения , доступные в Windows, вы можете довольно легко удаленно завершать работу, перезагружать или выходить из системы на локальных или сетевых компьютерах.

Команда удаленного выключения

Чтобы открыть диалоговое окно «Удаленное отключение», откройте командную строку, введите shutdown -i и нажмите Enter.


Откроется диалоговое окно удаленного отключения.


В открывшемся окне нажмите Добавить. Это позволит вам добавить имя компьютера, который вы хотите удаленно отключить. Вы можете найти имя ПК, щелкнув правой кнопкой мыши Компьютер и выбрав свойства. В качестве примера я использовал his-pc и her-pc . Кроме того, вы также можете использовать кнопку обзора для поиска других компьютеров в вашей сети.

После этого нажмите ОК.

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

Обратите внимание, что:

  • Чтобы отправлять команды на другие ПК, вам также необходимо иметь права администратора на этих компьютерах.
  • Для того чтобы Tracker Event Shutdown мог записывать информацию, на удаленном компьютере должна быть включена служба удаленного реестра.
  • На удаленном компьютере должны быть включены исключения брандмауэра для удаленного администрирования и инструментария управления Windows.

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

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

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

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

В серверных системах семейства 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$. Чтобы его включить нужно выполнить два условия: включить общий доступ к файлам и принтерам

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

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

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

rdp-shutdown-009.jpg

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

PowerShell

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

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

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

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

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

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

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

rdp-shutdown-010.jpg

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

Читайте также: