выполнить скрипт на сервере

Запуск команд или скрипта через SSH

Сегодня рассмотрим примеры для запуска команд или скрипта через SSH соединения. Научимся запускать наши команды/скрипты из одной рабочей станции Linux на другой удаленной Linux машине. Рассмотрим практические примеры использования мощного инструмента SSH в администрировании Linux.

Запуск команд через SSH

Если вы хотите удаленно запустить какую-либо команду на сервере через SSH, то нет ничего проще. Давайте рассмотрим пару примеров.

Узнайте аптайм удаленного сервера:

Узнать проходит ли пинг на удаленном сервере до google DNS:

Перезагрузить удаленную машину:

Запуск нескольких команд через SSH

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

Запустить несколько команд на удаленном хосте по SSH:

Практические примеры использования SSH

Узнайте аптайм и сколько свободного места на диске:

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

Узнать версию ядра, количество ядер CPU и сколько всего RAM:

SSH: Запуск Bash Скрипта

Также бывает ситуация, когда на Linux сервере лежит какой-либо скрипт и его необходимо запустить по SSH на другом Linux сервере.

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

Эта задаче безусловно может быть выполнена и при этом довольно просто.

Что если вы хотите выполнить сценарий с аргументом.

Если требуются привилегии sudo, то команда примет вид:

Если есть вопросы, то пишем в комментариях.

Источник

Ловим попутный ветер или как запустить скрипт PHP

Дата публикации: 2016-09-19

выполнить скрипт на сервере

От автора: Если вы когда-нибудь запускали воздушного змея, то знаете, что это не так просто, хотя со стороны кажется наоборот. На самом деле нужно приловчиться, чтобы вовремя веревку натянуть или поймать воздушную «волну». Сегодня я расскажу, как запустить скрипт PHP и какие «веревочки» дергать, чтобы он не просто работал, а «летал»!

Особенности запуска

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

Обычный (удаленный) –предоставляется хостером.

Локальный – устанавливается на клиентской машине.

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

выполнить скрипт на сервере

Бесплатный курс по PHP программированию

Освойте курс и узнайте, как создать динамичный сайт на PHP и MySQL с полного нуля, используя модель MVC

В курсе 39 уроков | 15 часов видео | исходники для каждого урока

На локальном сервере все обстоит иначе. Перед тем, как запустим PHP скрипт в браузере, выясним эти особенности.
В зависимости от применяемого сервера набираемый адрес может отличаться. Чаще всего в «наших» краях используются различные сборки с Apache, из которых самой распространенной является Денвер.

Запуск скрипта в Denwer

В «апачевских» сборках все скрипты запускаются в localhost. Чтобы продемонстрировать это на практике, создадим какой-нибудь интересный пример. Вот его код:

Разместите этот код в файле PHP и сохраните его на виртуальном диске, который создается после запуска локального сервера. У меня это файл test2.php.

выполнить скрипт на сервере

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

Теперь разберемся, как запустить PHP скрипт на компьютере. Для этого в браузере следует указать адрес в формате: localhost/имя_файла.php

выполнить скрипт на сервере

Начинаем мучиться

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

выполнить скрипт на сервере

Бесплатный курс по PHP программированию

Освойте курс и узнайте, как создать динамичный сайт на PHP и MySQL с полного нуля, используя модель MVC

В курсе 39 уроков | 15 часов видео | исходники для каждого урока

выполнить скрипт на сервере

Это странно, поскольку упоминаемые библиотеки у меня присутствовали в папке ext. Оказывается, что все дело в неправильно прописанных путях в конфигурационном файле php.ini.

В нем нужно найти раздел «Paths and Directories» и исправить путь, указанный в параметре extension_dir. Измените правые слэши на левосторонние и добавьте в начале адреса букву виртуального диска.

выполнить скрипт на сервере

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

Если все хорошо

В командной строке системе нужно указать путь, где находится «экзешник» интерпретатора языка PHP. В Денвере он находится по этому пути: Z:\usr\local\php5

Здесь же расположен и глобальный файл конфигурации.

выполнить скрипт на сервере

Запускаем командную строку Винды. Затем указываем системе путь к исполняемому файлу PHP. После чего задаем путь к нужному скрипту: Z:\usr\local\php5\php.exe Z:\home\localhost\www\test2.php

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

выполнить скрипт на сервере

И все потому, что командная строка «не понимает» теги HTML. Перед тем, как запустить PHP скрипт из командной строки, немного модифицируем код, чтобы он возвращал нам только текущее время без эффекта «часов».

Источник

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

Запустить скрипт на локальном (например, на домашнем) компьютере – весьма просто. А вот как это сделать на удаленном компьютере, т.е. на сервере?

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

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

Подавляющее большинство серверных (т.е. таких, которые выполняются на стороне сервера) скриптов пишут, например, на PHP, на Perl (ну, и плюс та или иная СУБД, если, конечно, в ней есть необходимость). РНР используется, если скрипты выполняют относительно небольшой объем работы, т.е. их целесообразно использовать там, где производительность (быстродействие) не является критичным. По сути, имея синтаксис и особенности, во многом сходные с языком С (Си), PHP во многом напоминает не что иное, как VBA от Microsoft. Практически та же самая идеология и, соответственно, примерно аналогичное быстродействие. На наш взгляд, PHP может применяться в основном для создания вспомогательных, не слишком часто запускаемых скриптов, которые, в идеале, запускаются не при первой загрузке страницы сайта. Например, для организации интерфейса, передачи данных с открытой страницы на сервер, ну, или т.п.

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

Кому-то может показаться, что написание серверных скриптов на С является анахронизмом. Однако, это не так. На самом деле, язык С дает примерно те же возможности, да и синтаксис, в целом, схож с РНР. Правда, серверные скрипты, написанные на С, являются, конечно, более объемными по сравнению с теми, что выполнены на РНР. Потом, в С можно столкнуться с довольно серьезной проблемой, связанной с кириллической кодировкой. В PHP она решается, можно сказать, автоматически, а в С – придется все программировать вручную. Но, повторимся, выигрыш в быстродействии – того стоит.

Как запустить на сервере программу, написанную на С (Си)?

В LINUX же немного по-другому. Например, для запуска программы, имеющей имя program, надо будет открыть консоль (или терминал, как его называют) и написать в командной строке:

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

Надеемся, Вы в курсе об одном из основных отличиях систем Windows и LINUX? Windows, начиная с версии XP, дает пользователю графический интерфейс, а консоль там является, на самом деле, лишь настройкой над ним (т.е. запускается соответствующая виртуальная машина, эмулируюшая консоль). Тогда как в LINUX система, наоборот, загружается изначально в консольном режиме, а уже над ней может быть загружена графическая оболочка.

Итак, на локальном компьютере все просто. А вот как это сделать на сервере?

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

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

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

Далее все зависит от того, в какой операционной системе работает сервер (хостинг), на котором Вы планируете запускать программу. Как правило, на серверах работает LINUX, например, Debian. Windows гораздо менее популярен. Понятно, что Ваша программа, которую Вы скопировали на сервер и хотите запустить, должна корректно запускаться в операционной системе сервера. Т.е. если, скажем, там установлен LINUX, то и программа должна быть написана и скомпилирована в Линуксе.

Затем, имеет большое значение, в какой операционной системе работает Ваш (домашний) компьютер.

Если он работает в Windows, в этом случае можно воспользоваться утилитой telnet от Microsoft. Она, к сожалению, не соответствует современным требованиям безопасности (в частности, аутенификационные данные – пароль – передаются в открытом виде). Поэтому целесообразно использовать соответствующий клиент для того, чтобы подключиться к серверу по SSH:

Возможно использование SSH-клиента PuTTy. Перейдя по указанной ссылке, Вы можете ознакомиться с подробным описанием технологии консольного подключения, т.е. по протоколу SSH. Клиент необходим для того, чтобы, в частности, эмулировать LUNUX на Вашем компьютере.

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

u123456789 — логин учётной записи хостинга
123.123.123.123 — IP-адрес сервера

Далее, если параметры введены правильно, система запросит пароль и, после корректного его ввода и проверки системой Вы попадете в консоль НА СЕРВЕР. И, в общем-то, можете делать там все, что потребуется. Ну, в рамках Ваших прав доступа, конечно.

Например, чтобы попасть в коренной каталог (на примере нашего сайта), нужно будет набрать команду

Вам нужно будет указать, соответственно, адрес своего сайта.

Далее, используя команду

cd пробел имя каталога

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

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

При этом хочется обратить Ваше внимание на некоторые, для новичков неочевидные, вещи. Иногда требуется запустить программу в фоновом режиме, т.е. чтобы ее выполнение не мешало другим программам, в том числе и самой оболочке (например, bash). Когда это актуально?

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

Поэтому программу подобного рода целесообразнее запустить (при ручном запуске) в фоновом режиме, что делается путем добавления символа &:

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

Вот с домашним компьютером – все проще: выключили его или начали перезагружать – и все, оперативная память чистая, все программы, даже зависшие и те, что работали в фоновом режиме, прекращают выполняться. А ведь здесь мы имеем дело – с СЕРВЕРОМ. Который выключается весьма редко (а если это будет часто, люди не станут размещать там свои сайты). Поэтому… Ваша программа, не будучи выгруженной, так и будет оставаться в оперативной памяти сервера. Во-первых, создавая ему бесполезную нагрузку.

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

Для сервера, работающего в LINUX, для этой цели может быть использована команда

Она выведет перечень всех процессов, запущенных Вами в системе (с учетом самой оболочки bash и служба аутенификации, конечно же). И, что немаловажно, укажет индентификаторы каждой из запущенных программ (столбец с заголовком PID).

Кстати, вот список основных команд, которые здесь могут пригодиться:

Вот, к примеру, результат, который выводит команда ps :

PID TTY TIME CMD
7318 pts/2 00:00:00 bash
20543 pts/2 00:00:00 ps
28314 pts/2 00:00:00 bash
28315 pts/2 00:00:00 logger

Кстати, команда kill имеет опции, выражаемые целым числом. Среди них имеют значение 1, 2, 15, 9. Последняя – вызывает принудительное, наиболее сильное (или грубое) завершение программы, причем игнорировать его она не сможет. Так, если Вы наберете

то должна выгрузиться оболочка bash (правда, скорее всего, она будет тут же автоматически загружена вновь, но уже с другим идентификатором).

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

Видим, что программе присвоен идентификатор со значением 21015.

Набираем ps, и вот что видим:

PID TTY TIME CMD
10292 pts/2 00:00:00 bash
10293 pts/2 00:00:00 logger
21015 pts/2 00:00:00 program
21016 pts/2 00:00:00 bash
21017 pts/2 00:00:00 logger
21022 pts/2 00:00:00 ps
28478 pts/2 00:00:00 bash

Так и есть, в третьей строчке находится наша программа с тем самым идентификатором.

Попытаемся (для эксперимента) вновь запустить ту же самую программу, путем набора

Система тут же сообщит:

bind: Address already in use

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

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

Поэтому – выгрузим программу из оперативной памяти:

Система даст сообщение:

Проверка при помощи команды ps показывает, что все, процесса с названием программ больше нет:

PID TTY TIME CMD
2382 pts/2 00:00:00 bash
2383 pts/2 00:00:00 logger
5848 pts/2 00:00:00 ps
28478 pts/2 00:00:00 bash

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

Это означает, что вновь, до момента освобождения порта, программа может не заработать – порт-то занят.

Поэтому после окончания работы с нею желательно проверить, каким сервисом открыты соединения на данному порту, при помощи следующей команды:

Вот что сообщит система:

tcp 0 0 0.0.0.0:5425 0.0.0.0:* LISTEN 21015/./program

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

Для очистки порта (т.е. для удаления его из системы) можно набрать

Произойдет «жесткое» удаление программы из оперативной памяти, в том числе и всех созданных ею объектов, т.е. логических портов.

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

Сеанс должен закрыться:

logout Connection to closed.

Таким образом, как видите, ручной запуск скрипта на удаленном сервере не представляет особого труда.

Источник

Как запустить JavaScript с помощью Node.js

выполнить скрипт на сервере

Если вы только сели за изучение JavaScript, то у вас очень быстро возникнет вопрос: а как запустить код?

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

Node.js — среда выполнения JavaScript-кода. Она создана на базе движка V8, который крутится в сердце браузера Chrome. Эта среда позволяет запускать JavaScript-сценарии в окружении операционной системы, а не браузера.

Кроме стандартных возможностей JavaScript, Node.js даёт инструменты для работы с сетью, вводом и выводом, файловой системой и не только. В придачу к среде идёт и пакетный менеджер npm, который позволяет разработчикам ставить сторонние пакеты в одну строку.

Разобраться с базовыми функциями будет просто, если вы уже знаете JavaScript или другой скриптовый язык.

Давайте попробуем

Сначала установим среду с сайта разработчиков и проверим в консоли, что всё прошло нормально.

Введём простую команду:

Результат, который мы получили:

Рассмотрим пару простых примеров. По традиции выведем Hello world! :

выполнить скрипт на сервереHello world!

Попробуем пример сложнее, например, цикл выводов. Как консоль отреагирует на него?

выполнить скрипт на сервереЦикл выводов.

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

Например, случайно пропустим букву в команде:

выполнить скрипт на сервереУпс, ошибка.

Ну вот, всё необходимое для написания простых и компактных приложений есть. Но писать большое приложение на десятки строк кода в консоли будет не слишком-то удобно. Да и такой подход не сработает, если приложение разбито на несколько скриптов, лежащих в разных файлах.

Усложняем задачу

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

Создайте на жёстком диске папку для проекта и положите туда ваш готовый скрипт. Назовите его index.js — так принято. Если под рукой скрипта нет, то возьмите цикл с выводом простого значения, с которого мы начали.

Второй способ — самостоятельно создать текстовый файл, назвать его package.json и заполнить все необходимые поля. Файл будет представлением приложения, в котором содержится его имя, версия, авторы и зависимости. На данном этапе может выглядеть так:

Но вводить команду постоянно — не слишком рациональное расходование времени. Давайте упростим себе жизнь.

Скопируйте в файл следующий код:

Подробнее про команды можно прочитать здесь.

Что мы сделали

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

Источник

1000++ способ запуска команд на удаленном компьютере

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

Возвращаясь к циклу «Конспект Админа», мне хотелось бы рассказать о вариантах запуска исполняемых программ на удаленных компьютерах. Эта статья будет интересна тем, у кого еще нет систем централизованного управления, но уже есть понимание утомительности ручного обхода рабочих станций и серверов. Либо тем, кому решения «под ключ» не интересны ввиду неспортивности.

В качестве того, зачем нужен такой запуск программ, можно привести недавнюю истерию с Петей\Не-Петей, когда все бросились проверять\отключать SMBv1 и загружать обновления. Да и провести инвентаризацию или установить срочный патч таким методом тоже можно.

Когда-то давно я устроился работать в организацию в период эпидемии Kido\Conficker. Наиболее простым способом выяснить, все ли хорошо в ИС компании, была славная утилита от Касперского под названием Kido Killer, которая проверяла наличие вируса и устраняла его. Запускать программу на доброй сотне машин руками было невесело, поэтому пришлось знакомиться с автоматизацией.

Если в операционных системах *nix для удаленного запуска, как правило, используется SSH, то у Windows способов запуска программ и скриптов воистину как песка в пустыне. Я разберу основные варианты, как общеизвестные, так и экзотические. Таких очевидных вещей как telnet-сервер касаться не буду, тем более Microsoft уже убрала его из современных ОС.

Способы старые, временем проверенные

Psexec

Пожалуй, это первое, что приходит на ум, когда идет речь об удаленном запуске программ. Утилита от Марка Руссиновича используется еще со времен Windows NT и до сих пор применяется. Помимо основной функции, можно использовать ее и как Runas, и для запуска программ в пользовательской сессии терминального сервера. Psexec также позволяет задавать ядра процессора, на которых будет запускаться программа, и ее приоритет в системе.

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

В файле computers.txt находится список компьютеров. Для запуска по всему домену можно использовать \\*. В файле \\server\share\log.txt будут появляться имена рабочих станций или серверов без обновления. Если в домене существуют компьютеры с *nix на борту или нет доступа к административному сетевому ресурсу Admin$ ― команда на этой машине не выполнится, но обработка продолжится. Чтобы скрипт не зависал при каждой попытке подключения, можно задать тайм-аут с помощью ключа -n.

Если компьютер выключен ― мы об этом не узнаем. Поэтому лучше предварительно проверять доступность машин или собирать в файле информацию об успешном или неудачном выполнении.

К минусам Psexec можно отнести то, что она из-за своего удобства и популярности часто используется вирусописателями. Поэтому антивирусные системы могут обнаруживать утилиту как опасность вида remote admin.

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

Для управления системами Windows с помощью разных графических утилит часто используется WMI (Windows Management Instrumentation) ― реализация объектно-ориентированного стандарта управления WBEM. В качестве утилиты с графическим интерфейсом для работы с WMI можно использовать wbemtest.exe.

Для работы с WMI из консоли создана wmic.exe. Например, для проверки установленных обновлений вместо жутковатой конструкции из предыдущего примера можно использовать простую команду:

Использовать список компьютеров также можно командой /node:»@computers.txt».

Еще при помощи WMI можно запускать программы – синтаксис предельно прост:

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

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

Групповые политики и скрипты

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

выполнить скрипт на сервере
Скрипты, выполняющиеся при старте и завершении системы.

выполнить скрипт на сервере
Скрипты, выполняющиеся при входе и выходе пользователя из системы.

Скрипты, настраиваемые в пользовательском разделе, выполняются от имени пользователя, а в разделе компьютера ― под аккаунтом SYSTEM.

Назначенные задания

Довольно интересный способ, заслуживающий право на жизнь. Назначенные задания можно создавать из командной строки при помощи утилиты schtasks.exe, выполнять их, затем удалять. Подробнее с синтаксисом можно ознакомиться в документации, я же разберу пример использования назначенных заданий в доменной среде. Предположим, нам нужно выполнить команду как можно быстрее вне зависимости от того, выключен компьютер или нет. Для этого используются так называемые предпочтения групповых политик (Group Policy Preference).

Искать установку назначенных заданий следует в конфигурации компьютера или пользователя ― «Настройка ― Параметры панели управления ― Назначенные задания».

выполнить скрипт на сервере
Создание нового назначенного задания.

Для выполнения команды или скрипта ASAP понадобится создать «Немедленную задачу (Windows 7 и выше)». Если вдруг в инфраструктуре остались машины под управлением Windows XP, то подойдет «Очередное задание (Windows XP)».

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

Пример WMI-фильтра для применения политики только на компьютерах с Windows XP:

В остальном процедура создания назначенного задания тривиальна. Единственное, не забывайте отметить пункт «Применить один раз и не применять повторно», если задача не требует повторного запуска.

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

При использовании таких назначенных заданий программа запустится, как только компьютер получит обновление групповой политики. Это удобно: не нужно проверять доступность компьютеров в случае Psexec и wmic и заставлять пользователей перезагружать машины, как в случае скриптов групповых политик. При необходимости можно скопировать файл скрипта локально в разделе «Настройка ― Конфигурация Windows ― Файлы».

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

Через реестр

Модификация реестра на пользовательских машинах ― странный вариант, лишь на случай крайней необходимости. Можно использовать ветки Run или RunOnce. Подробнее о них ― в документации. Сама модификация реестра может проводиться через групповые политики или из командной строки ― например, такой командой:

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

Есть и другие способы, такие как правка ярлыков в папке «Автозагрузка» или добавление в ярлык к популярной программе && script.cmd, но эти методы уже из серии «можно, но не нужно».

Теперь перейдем к новым инструментам.

Способы новые или куда же без PowerShell

PowerShell, оправдывая свое название, может подключаться к удаленным компьютерам при помощи WMI, RPC и WS-Management (WSMan). Использование последнего метода требует предварительной настройки.

Командлеты, не требующие предварительной настройки, как правило, имеют параметр ComputerName, но не имеют параметра Session. Посмотреть список таких командлетов можно командой:

Для настройки WSMan в общем случае достаточно выполнить команду Enable-PSRemoting-Force. Она запустит службу удаленного управления WinRM и пропишет исключения в фаерволе ― в принципе, это можно сделать для всего домена при помощи групповых политик. Подробнее настройка описана в документации.

После того как все компьютеры будут готовы принимать запросы, мы сможем подключаться при помощи соответствующих командлетов PowerShell. Для проверки возможности подключения используется командлет Test-WSMan.

выполнить скрипт на сервере
Проверка возможности подключения.

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

Где COMPUTER ― имя компьютера, COMMAND ―– имя команды, а USERNAME ― имя пользователя, если оно нужно.

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

Если же нам нужно получить полноценную консоль ― не автоматизации ради, а ради управления конкретным компьютером, ― то можно использовать командлет Enter-PSSession.

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

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

Конечно, кроме встроенных средств и небольших утилит, существует множество программ для управления структурой. Помимо взрослых решений, для управления конфигурациями вроде Chef, Ansible и MS SCCM можно использовать и средства мониторинга вроде Zabbix, и даже консоль управления антивирусом Касперского.

В период гетерогенных структур хорошо бы иметь возможность унифицированного управления Windows и Linux. Это можно сделать и с помощью PowerShell, что само по себе достойно отдельной статьи ― стоит такую сделать или уже лишнее?

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

Источник

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

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