Как обслуживать Python CLI через SSH - PullRequest
5 голосов
/ 19 августа 2011

Я нахожусь в процессе написания приложения с внешним интерфейсом Urwid и внутренним модулем MongoDB на python.Конечная цель - иметь возможность обслуживать приложение по SSH.Приложение имеет собственную систему аутентификации / идентификации.Я не беспокоюсь о затратах на запуск нового процесса для каждого пользователя, ожидаемое количество одновременных пользователей невелико.Поскольку клиент не вызывает никакой информации о состоянии и вместо этого все хранится в БД, я не беспокоюсь о сеансах как таковых, за исключением целей аутентификации.

Мне было интересно, есть ли какие-либо методы для обслуживания приложениябез необходимости свернуть мой собственный код сервера сокетов или перекодировать приложение с помощью Twisted.Честно говоря, я не знаю, как Урвид и Твист играют вместе.Я вижу, что в Urwid есть метод TwistedEventLoop, который подразумевает использование витого реактора, но я не могу найти пример кода, запускающего приложение Urwid по витому соединению.Были бы оценены примеры, даже простые.Я также посмотрел на ZeroMQ, но это кажется еще более непостижимым, чем Twisted.Короче говоря, я исследовал ряд различных библиотек, предназначенных для обслуживания приложений через tcp, большинство из которых - через telnet.И почти все они сосредоточены на http.

В худшем случае, я ожидаю, что я могу создать крайне заблокированного пользователя в качестве глобального логина и использовать синхронизированные сеансы SSH.таким образом, каждый пользователь получает свой собственный chroot / process / client.Да, я знаю, что это, вероятно, "Очень плохая идея (тм)".Но я должен был выбросить это как возможность.

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

-CH

Ответы [ 3 ]

4 голосов
/ 19 августа 2011

В Twisted есть слой для написания таких вещей: twisted.conch.insults. Я хочу быть осторожным, чтобы не переоценить это; ему все еще нужно больше документации, а некоторые функции отсутствуют. Как сказано в документации, в данный момент она «очень проста».

Оскорбления произошли по какой-то причине. Насколько я понимаю, Urwid, даже в своем режиме Twisted, общается напрямую с файловым дескриптором, и, следовательно, его вывод не может быть зашифрован и транспортирован одним и тем же потоком; кто-то должен читать другой конец этого дескриптора файла. Я полагаю, что режим Twisted больше относится к консольному приложению, использующему Urwid, которое использует Twisted сеть для других вещей; как вы могли бы хотеть иметь в клиентском приложении или на сервере с представлением консоли.

Если вы не возражаете против одного процесса на соединение, вы можете написать SSH-сервер, используя Conch, который порождает вашу программу Urwid в качестве подпроцесса с использованием PTY, причем информация о его аутентификации и среде предоставляется, например, через переменные среды Познакомьтесь с spawnProcess API и превосходной серией Жан-Пола Кальдероне по использованию Conch .

1 голос
/ 19 августа 2011

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

0 голосов
/ 19 января 2012

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

...