Я начал писать немного длинный комментарий к этому делу, но когда вы приближаетесь к лимиту символов для комментария, полезно преобразовать его в ответ, я думаю!
Самый простой способ выполнить эту задачу будет с одной из многих отличных библиотек python для создания служб REST. Мой личный фаворит bottle и реализации данного вида услуг с использованием бутылки будет столь же просто, как:
from bottle import route, run, template
@route('/execute/<command>')
def execute(command):
if command == "list_blogs":
// Do something 1
elif command == "format_c":
// Do something 2
run(host='localhost', port=79897)
Это позволит не только предоставить вам сервис REST, но и поставить железную стену между входом пользователя и фактическое выполнение, поэтому пользовательский ввод не будет искажен с файлом, который вы пытаетесь выполнить. Не забудьте никогда не использовать переменную команды где-либо вне if/else.
Как вы можете заметить, это связано со слабостью - любой, у кого есть эта ссылка, может вызвать эти функции и потенциально вызвать отказ в обслуживании или даже фактический урон. Вот почему было бы неплохо иметь какой-то контроль и дополнительную безопасность, чтобы знать, что запрос был сделан от действительного клиента. Есть много способов решить эту проблему, я настоятельно рекомендую вам глубже изучить доступные. Очень просто один будет храниться на сервере в Dict ключей и солей, как это:
salts["here_you_put_random_hash_as_key"] = "and_here_the_salt"
И тогда вы также хранить соль и ключ для этого конкретного клиента в коде клиента. Затем, когда клиент делает запрос, он включает в себя его ключ и контрольную сумму (которая состоит из md5, сделанного из команды, ключ солидаля клиентов и, например, текущий час) в качестве дополнительных аргументов. Затем, когда вы получаете запрос и все 3 переменные, вы пытаетесь создать свою собственную контрольную сумму, используя одни и те же данные (поэтому вы выбираете соль для предоставленного ключа клиента и вычисляете md5 для этой соли, текущего часа и команды, поступающей от клиента), и если они то вы знаете, что запрос действителен.
Самый простой способ сделать это будет с интерфейсом REST, поскольку для него есть готовые библиотеки, например, бутылка http://bottlepy.org/docs/dev/index.html –
Нужно ли быть Python? Вы можете сделать это с помощью сценария оболочки one-liner вокруг netcat ... Или, что еще более просто, это именно то, что уже делают telnet, rsh и т. Д. – abarnert
В стороне, вы должны быть очень осторожны, если вы планируете настроить сервер, который принимает любую строку и выполняет ее. Существует много вредоносных способов для этого. (например, кто-то отправляет «rm -rf /» на сервер). Даже если ваш сервер находится в безопасной/изолированной сети, все равно будет хорошей практикой, чтобы убедиться, что сервер может делать только «известные»/«хорошие» вещи. Например. есть список команд, которые ему разрешено запускать. –