2011-08-19 14 views
5

Estoy en el proceso de escribir una aplicación con un front-end de Urwid y un back-end de MongoDB en python. El objetivo final es poder servir la aplicación a través de SSH. La aplicación tiene su propio sistema de autenticación/identidad. No estoy preocupado por la sobrecarga de lanzar un nuevo proceso para cada usuario, el número esperado de usuarios simultáneos es bajo. Dado que el cliente no recupera ninguna información de estado y, en cambio, está todo almacenado en la base de datos, no estoy preocupado por las sesiones como tales, excepto con fines de autenticación.Cómo utilizar la aplicación CLI de Python sobre SSH

Me preguntaba si hay algún método para servir la aplicación como es sin tener que rodar mi propio código socket-server o volver a codificar la aplicación usando Twisted. Honestamente, no sé cómo juegan Urwid y Twisted juntos. Veo que Urwid tiene un método TwistedEventLoop que pretende usar el reactor trenzado, pero no puedo encontrar ningún código de ejemplo que ejecute una aplicación Urwid sobre una conexión retorcida. Se apreciarán ejemplos, incluso simples. También miré ZeroMQ pero parece aún más inescrutable que Twisted. En resumen, exploré una serie de bibliotecas diferentes que pretenden servir aplicaciones a través de tcp, la mayoría de ellas por telnet. Y casi todos se centran en http.

Escenario del peor caso Supongo que puedo crear un usuario extremadamente bloqueado como un inicio de sesión global y usar sesiones chuncadas SSH. de esa forma cada usuario obtiene su propio chroot/proceso/cliente. Sí, sé que es probablemente una "Muy mala idea (tm)". Pero tuve que tirarlo como una posibilidad.

Agradezco cualquier comentario constructivo. Los insultos, los insultos y la arrogancia serán fruncidos, impresos y escupidos.

-CH

Respuesta

1

Dado que la aplicación hace su propia autenticación, sólo se puede volcar a través xinetd y dejar que manejan los E/S. Entonces los usuarios pueden simplemente hacer telnet al puerto apropiado y hacer que funcione.

+0

Suena interesante. Analicé eso, stunnel puede proporcionar un contenedor SSL y xinetd puede manejar las conexiones. Hmmm. Gracias. – TehCorwiz

+0

Esto podría ser un camino razonable y de bajo esfuerzo: sin embargo, tenga en cuenta que "SSL" y "SSH" no son el mismo protocolo. – Glyph

4

Twisted tiene una capa para escribir este tipo de cosas: twisted.conch.insults. Quiero tener cuidado de no exagerar; todavía necesita más documentación y algunas funciones faltan. Como dice el docstring, es 'muy básico en este momento'.

Insultos surgieron por una razón sin embargo. Tengo entendido que Urwid, incluso en su modo Twisted, está hablando directamente con un descriptor de archivo, y por lo tanto no puede tener su salida cifrada y transportada por el mismo hilo; alguien necesita leer el otro extremo de ese descriptor de archivo. Creo que el modo Twisted se trata más de tener una aplicación de consola que usa Urwid que usa Twisted networking para otras cosas; como es posible que desee tener en una aplicación cliente, o en un servidor con una vista de consola.

Si no le importa un proceso por conexión, puede escribir un servidor SSH utilizando Conch que genera su programa Urwid como un subproceso que utiliza un PTY, con información sobre su autenticación y entorno suministrado, por ejemplo, a través de variables de entorno. Consulte spawnProcess API y Jean-Paul Calderone's excellent series on using Conch.

0

Un truco barato y posiblemente muy peligroso es poner tu aplicación como el shell por defecto para un usuario en particular. sin embargo, debes ser muy cuidadoso (sugerencia de ir al carajo y volver) ya que es posible salir de la aplicación y entrar al servidor.