2008-10-09 4 views
5

Я ищу создание сервера на python, который я могу запустить, и будет работать как SSH-сервер. Это позволит другим пользователям войти в систему и действовать так, как если бы они вошли в систему, но имели доступ только к одной команде.Python - Как использовать Conch для создания виртуального SSH-сервера

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

В то время как я могу разобраться, как это сделать с помощью раковины, чтобы получить его в «обычную» оболочку ... Я не могу понять, как сделать так, чтобы поток SSH работал так, как если бы он был реальным (Я предпочитаю ограничивать/bin/bzr, так что bzr + ssh будет работать.

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

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

ответ

7

Когда вы пишете сервер Conch, вы можете контролировать, что происходит, когда клиент делает запрос оболочки, реализуя ISession.openShell. Сервер Conch запросит IConchUser из вашего королевства, а затем адаптирует полученный аватар к ISession, чтобы позвонить по нему openShell, если это необходимо.

Задача ISession.openShell состоит в том, чтобы передать переданный ему транспортный объект и связать его с протоколом для интерпретации полученных от него байтов и, при желании, записать в него байты, которые будут отправлены клиенту.

В случае неудачного поворота объект, переданный openShell, который представляет транспорт, фактически является поставщиком IProcessProtocol. Это означает, что вам необходимо позвонить makeConnection, передав IProcessTransport провайдер. Когда данные будут получены от клиента, IProcessProtocol позвонит writeToChild на транспорт, который вы перейдете на номер makeConnection. Когда вы хотите отправить данные клиенту, вы должны позвонить на него childDataReceived.

Чтобы узнать точное поведение, предлагаю прочитать the implementation of the IProcessProtocol that is passed in. Не зависеть ни от чего, что не является частью IProcessProtocol, но, увидев, что реализация может упростить понимание того, что происходит.

Вы также можете посмотреть the implementation of the normal shell-creation, чтобы получить представление о том, к чему вы стремитесь. Это даст вам представление о том, как связать stdio дочернего процесса bzr, который вы запускаете с помощью SSH-канала.

-2

Хотя Python на самом деле мой фа vorite language, я думаю, вам не нужно создавать собственный сервер для этого. Когда вы посмотрите на OpenSSH Manualpage for sshd, вы найдете параметры «команды» для файла авторизованных ключей, который позволяет определить определенную команду для запуска при входе в систему.

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

Мы используем это для создания туннелей SSH для SVN, и это работает отлично.

+0

Это не так, как я хочу это сделать. Он должен быть в python (который я могу получить для авторизации), но не знаю, как сделать ссылку на приложение. Это должно быть в python для работы в приложении, предназначенном для него, и для использования для тех, у кого нет доступа для добавления новых пользователей – Mez 2008-10-09 09:03:53

 Смежные вопросы

  • Нет связанных вопросов^_^