Запуск команд Linux из Интернета с NodeJS + вывод в реальном времени - PullRequest
0 голосов
/ 24 февраля 2012

Проще говоря, возможно ли это и как лучше всего добиться возможности отправлять команды на сервер nodeJS из сценария php (сторона сервера не дает пользователям отправлять пользовательские и вредоносные команды по сравнению с отправкой команд со стороны js на стороне клиента)на сервер nodejs, который затем запустит эти команды и отправит выходные данные в режиме реального времени на веб-страницу.

До сих пор я смог выдать команды с помощью php curl на web-сокет nodeJS (сокет.io), а затем сервер nodeJS, передающий выходные данные через клиентскую часть eventsource / socket.io.

Цель этого состоит в том, чтобы управлять VPS из Интернета с выводом в реальном времени команд и задач, которые задают пользователи.Сервер nodejs будет работать на сервере VPS и выделять дочерние процессы для выполнения каждой команды.Если это возможно, то я вижу, что это становится все труднее, поскольку каждый клиент должен видеть только результаты команд, которые он запускает, и поэтому потребуется как-то связать входящий сокет php и исходящий источник событий?

Есть идеи?Приветствия.

1 Ответ

0 голосов
/ 14 марта 2013

Вы можете просто запустить child_process.exec() и направить процесс stdout и stderr к ответу http - ничего больше, чем это.

Единственное, что я вижу, это то, что если вы хотите, чтобы пользователь запускал любую команду, которую он хочет, приложение Node не обязательно будет знать тип MIME, чтобы сообщить браузеру, что ответ получен. И в то время, когда вам нужно отправить код ответа HTTP, вы не обязательно знаете, был ли процесс успешным или нет - поэтому, если вы действительно хотите использовать 500 Internal Server Error, если удаленный процесс завершает работу с ненулевым значением, вы будете нужно буферизовать вывод до завершения процесса или подождать некоторое время и предположить, что если он не завершился неудачей через N секунд, он не будет.

Я предполагаю, что вы понимаете, что разрешение процессу удаленно запускать специальные программы на удаленной машине, просто делая запрос http * чрезвычайно опасно по причинам, столь же многочисленным, как и программы, которые могут быть запущены.

Вот пример того, как принимать запросы из Интернета, передавать их через программу и возвращаться в ответ. Он принимает входящий файл изображения, использует netpbm и potrace, чтобы преобразовать его в SVG и отправить результат обратно клиенту, даже не записав его на диск - Unix-каналы - замечательная вещь. Вам понадобится Linux или аналогичный, с установленными w / netpbm и potrace, чтобы реально использовать его: https://timboudreau.com/code/traceservice/file/tip/traceservice.js

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...