2008-10-09 25 views
5

Estoy buscando crear un servidor en python que pueda ejecutar, y funcionará como un servidor SSH. Esto permitirá que usuarios diferentes inicien sesión y actúen como si hubieran iniciado sesión normalmente, pero solo tenían acceso a un comando.Python - Cómo utilizar Conch para crear un servidor SSH virtual

Quiero hacer esto para poder tener un sistema en el que pueda agregar usuarios sin tener que crear una cuenta en todo el sistema, para que puedan, por ejemplo, comprometerse con una rama de VCS o similar.

Mientras puedo averiguar cómo hacer esto con conch para obtener un shell "personalizado" ... No puedo encontrar la manera de hacerlo para que la secuencia SSH funcione como si fuera una real (Prefiero limitarme a/bin/bzr para que bzr + ssh funcione.

Tiene que estar en python (lo que puedo hacer para autorizar) pero no sé cómo hacer el ligarse a la aplicación.

Esto tiene que ser en Python para trabajar dentro de la aplicación de su diseñado para, y ser capaz de ser utilizado por aquellos que no tienen acceso a añadir nuevos usuarios

Respuesta

7

Cuando escribe un servidor Conch, puede controlar lo que sucede cuando el cliente realiza una solicitud de shell implementando ISession.openShell. El servidor Conch solicitará IConchUser de su dominio y luego adaptará el avatar resultante al ISession para llamar al openShell si es necesario.

ISession.openShell es tomar el objeto de transporte que se le ha pasado y asociarlo con un protocolo para interpretar los bytes recibidos de él y, si se desea, escribir bytes para enviarlo al cliente.

En un desafortunado giro, el objeto pasó a openShell que representa el transporte es en realidad un proveedor IProcessProtocol. Esto significa que debe llamar al makeConnection, pasando un proveedor IProcessTransport. Cuando se reciben datos del cliente, el IProcessProtocol llamará al writeToChild en el transporte que pase al makeConnection. Cuando desee enviar datos al cliente, debe llamar al childDataReceived.

Para ver el comportamiento exacto, sugiero leer the implementation of the IProcessProtocol that is passed in. No dependa de nada que no sea parte de IProcessProtocol, pero ver la implementación puede facilitar la comprensión de lo que está sucediendo.

Es posible que también desee consultar the implementation of the normal shell-creation para tener una idea de lo que está buscando. Esto le dará una pista sobre cómo asociar el stdio del proceso secundario bzr que inicia con el canal SSH.

-2

Mientras Python realmente es mi fa idioma vorite, creo que no necesita crear su propio servidor para esto. Cuando mira el OpenSSH Manualpage for sshd, encontrará las opciones de "comando" para el archivo de claves autorizadas que le permite definir un comando específico para ejecutar al iniciar sesión.

Usando las teclas, puede usar una cuenta del sistema para permitir que muchos usuarios inicien sesión, simplemente coloque sus claves públicas en el archivo de claves autorizado de la cuenta.

Estamos utilizando esto para crear túneles SSH para SVN y funciona muy bien.

+0

esta no es la forma en que quiero hacerlo. Debe estar en python (que puedo obtener para hacer la autorización) pero no sé cómo hacer el enlace a la aplicación. Esto tiene que ser en Python para que funcione dentro de la aplicación para la que fue diseñado, y para poder ser utilizado por aquellos que no tienen acceso para agregar nuevos usuarios. – Mez

Cuestiones relacionadas