7 июл. 2014 г.

Удаленное выполнение команд на Windows

Для удаленного выполнения команд в Windows есть отличная штука - PsExec. Принципиально похожа на линуксовый SSH. Эта утилита работает со всеми версиями Windows, начиная с XP (XP, 2003, Vista, 2008, 7,8, 2012).

Итак, на локальной машине скачиваем утилиту (точнее, набор утилит), с сайта Microsoft Technet и распаковываем, например, в папку C:\PSTools.
Далее, открываем консоль путем [Win+R] или Пуск - Выполнить - cmd.
Переходим в распакованную папку:

cd C:\PSTools

Теперь мы можем выполнять команды на удаленной Windows машине, запуская psecex в таком формате:

psexec \\remote_name_or_ip -u user -p password command

На удаленной машине должны быть запущены службы Server и Workstation.

Вот так - из-коробки - работает только на Windows 2003/XP. В версиях начиная с Vista из-за другого механизма доступа (UAC и т. д.), необходимо немного "пошаманить".

На удаленной машине под управлением Windows Vista или поздней открываем Редактор Реестра (Start - Run - regedit) и создаём ключ реестра HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System\LocalAccountTokenFilterPolicy типа DWORD и со значением 1.

Всё, теперь можно выполнять команды и на удаленной Vista+ системе, выполняя следующую команду:

psexec \\remote_name_or_ip -u user -p password -h command

Флаг -h нужен, чтобы запустить команду от имени Администратора.

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

А для того, чтобы получить шелл на удаленной машине, выполняем команду:

psexec \\remote_name_or_ip -u user -p password -h cmd

Ссылки:

  1. http://technet.microsoft.com/en-us/sysinternals/bb897553.aspx
  2. http://forum.sysinternals.com/faq-common-pstools-issues_topic15920.html
  3. http://stackoverflow.com/questions/828432/psexec-access-denied-errors