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

2010-02-08, 01:01 / Argon

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

Я использую 2 средства удаленного выполнения консольных команд: PsExec и WinRM, у каждого из них есть свои преимущества.

PsExec

Одним из отличных решений поставленной в заголовке задачи является использование программы PsExec от великого Марка Руссиновича.

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

Если PsExec запускается от имени администратора, который входит в тот же домен, что и удаленны компьютер, то никаких учетных данных даже вводить не нужно. В противном случае, их можно указать в командной строке, либо PsExec сама их запросит. PsExec работает на ОС начиная с Windows 2000 и заканчивая 64-битным Windows Server 2008 R2.

Очень полезными в PsExec являются следующие возможности:

  • Выполнение команды на группе компьютеров. Пример: следующая команда позволяет принудительно применить самые свежие групповые политики:
    psexec @group.txt gpupdate /force
  • Выполнение команд от имени системной учетной записи. Пример: следующая команда заставит удаленную систему принудительно проверить обновления:
    psexec \\computer -s wuauclt /detectnow
  • Копирование выполняемой программы на удаленный компьютер перед выполнением. Пример: следующая команда позволит обновить членство данного компьютера в группе безопасности Active Directory (токен доступа) без перезагрузки:
    psexec \\computer -c -s klist.exe purge

Трудно переоценить пользу этой программы, если использовать скрипты и возможности консольных команд, встроенных в Windows.

Windows Remote Management

Изначально это была серверная технология для удаленного управления оборудованием, которая появилась в Windows Server 2003 R2 как часть компонента Hardware Management, но недавно Microsoft выпустили пакет Windows Management Framework, который включает в себя PowerShell 2.0 и WinRM 2.0 и устанавливается на клиентские ОС как обновление. Подробности можно прочитать в статье KB968929.

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

Использование WinRM происходит через 2 команды.

winrm.cmd служит для конфигурирования настроек и диагностики клиента и сервера WinRM.

Для того, чтобы сервер WinRM начал принимать команды, должна быть запущена служба Windows Remote Management и произведена её начальная конфигурация. Используйте команду

winrm quickconfig на локальной машине, либо финт ушами
psexec -s \\servername winrm quickconfig по сети, используя PsExec от имени системной учетной записи.

Будет предложено автоматически запускать службу WinRM и разрешить уделенные подключения, соглашайтесь ;)

Чтобы успешно подключаться к WinRM серверу (имеется в виду серверная часть, принимающая команды), не входящему в тот же домен, что и ваш клиентский компьютер, необходимо на клиенте этот целевой сервер добавить в «доверенный список» следующей командой:

winrm set winrm/config/client @{TrustedHosts="servername"}, где вместо servername можно указать IP-адрес, либо * (звёздочку).

Для пользователей Windows Vista и Windows 7, работающим не от имени встроенного администратора (обычно так и бывает), нужно выполнить следующую команду

reg add HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System /v LocalAccountTokenFilterPolicy /t REG_DWORD /d 1 /f

По умолчанию, установлено ограничение на 5 одновременных соединений WinRM от клиента, для увеличения этого числа выполните команду

winrm s winrm/config/winrs @{MaxShellsPerUser="X"}

winrs.exe — клиент для отправки запросов к серверной части. Пример: следующая команда принудительно перезагрузит удаленную систему…

winrs -r:servername shutdown /r /t 0

В доменной среде при отправке команд используются учетные данные запустившего пользователя. Для посыла команд от имени другого пользователя используются ключи -u:user -p:pass. Пример: следующая команда очистит локальный кэш DNS-имён на удаленной системе

winrs -r:servername -u:user -p:pass ipconfig /flushdns



13 комментариев

Тойво Глумов
# Комментарий от 2010-03-01, 19:07

«Прелесть WinRM заключается в прост-а-те развертывания в доменной» — думаю, стоит поправить опечатку.

Argon
# Комментарий от 2010-03-01, 19:27

Спасибо за полезный комментарии, среди моря лести спамеров.

gavrosh
# Комментарий от 2010-06-17, 14:15

А централизованного механизма развёртывания WinRM в домене никакого нет? а то ведь опухнешь на всех клиентах настраивать(

gavrosh
# Комментарий от 2010-06-17, 14:18

и ещё вопрос, может глупый), а чем телнет плох?

Argon
# Комментарий от 2010-06-17, 14:26

Конечно есть, через WSUS распространяете последний .Net Framework, разрешаете в групповых политиках запрашивать опциональные обновления, после этого клиенты у WSUS-а спросят WinRM 2.0, его и одобряем. Вот WinRM и установлен на всех компах.

А телнет немного для другого сделан.

gavrosh
# Комментарий от 2010-06-17, 14:40

т.е. теоретически я говорю через групповую политику — Служба WinRM включись, и оно работает, так?

Argon
# Комментарий от 2010-06-17, 14:52

Да, все можно сделать через ГП, но могут быть тонкости.

gavrosh
# Комментарий от 2010-06-17, 16:24

Здорово, спасибо за материал)

lamer
# Комментарий от 2011-03-03, 15:40

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

Argon
# Комментарий от 2011-03-03, 18:50

Верно, ведь удаленное выполнение команд — это очень мощная функция, которая не должна быть доступна пользователям, не имеющим на это прав.

Однако, psexec имеет ключ «-l», который позволяет имитировать исполнение команды от имени пользователя без прав администратора на целевой системе.

ekzorchik
# Комментарий от 2012-04-09, 11:58

Смотрите статью как настроить winrm через групповые политики:
http://www.ekzorchik.ru/wordpress/2012/04/winrm/
У меня на работе все прекрасно работает.
Желаю удачи.!!!

Мартин
# Комментарий от 2014-12-04, 23:45

Скажите пожалуйста, что я неправильно сделал: я распаковал сборку в папку виндовс, при работе на локальном компьютере команды срабатывали, а при удаленной работе выскакивала ошибка»Couldn’t access ASUS», (ну асус это имя компа к которому коннектился) имя правильное, а подключения нет (оба компьютера находятся в одной локальной сети в одном домене), что необходимо прописывать (вот пример моей команды : psexec \\ASUS D://happy.bat -realtime -d) еще прописывал ключ -s но тот же результат, помогите, плиз)

Argon
# Комментарий от 2014-12-05, 01:15

Если не удаётся подключиться к дискам на этом компьютере под вашим логином и паролем, например так

\\ASUS\C$

то проблема за пределами psexec. Нужно разбираться с сетевой доступностью и правами доступа.

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