2011-08-19 2 views
5

저는 Urwid 프론트 엔드와 MongoDB 백엔드를 파이썬으로 작성하는 중입니다. 궁극적 인 목표는 SSH를 통해 응용 프로그램을 제공 할 수있게하는 것입니다. 응용 프로그램에는 자체 인증/ID 시스템이 있습니다. 나는 각 사용자에 대해 새로운 프로세스를 시작하는 오버 헤드에 대해 걱정하지 않는다. 예상되는 동시 사용자 수는 적다. 클라이언트가 상태 정보를 리콜하지 않고 그 대신 DB에 저장되어 있기 때문에 인증 목적을 제외하고는 세션에 대해 걱정하지 않습니다.SSH를 통해 Python CLI 응용 프로그램을 제공하는 방법

내 소켓 서버 코드를 굴리거나 Twisted를 사용하여 응용 프로그램을 다시 코딩하지 않아도 응용 프로그램을 제공 할 수있는 방법이 있는지 궁금합니다. 솔직히 우르드와 트위스트가 함께 노는 법을 알지 못합니다. Urwid에는 twisted reactor를 사용하는 TwistedEventLoop 메서드가 있지만 꼬인 연결을 통해 Urwid 응용 프로그램을 실행하는 예제 코드를 찾을 수 없습니다. 단순한 예조차도 인정 될 것입니다. 나는 또한 ZeroMQ를 보았습니다. 그러나 그것은 Twisted보다 훨씬 더 설득력이 있습니다. 간단히 말해서, 텔넷을 통해 대부분의 응용 프로그램을 tcp를 통해 제공하는 것을 목표로하는 다양한 라이브러리를 살펴 보았습니다. 거의 모두 http에 중점을 둡니다.

나는 극히 제한된 사용자를 글로벌 로그인으로 만들고 chrooted SSH 세션을 사용하기를 기대합니다. 그런 식으로 각 사용자는 자신의 chroot/process/client를 얻습니다. 네, 아마도 그것이 "매우 나쁜 생각 (tm)"이라는 것을 압니다. 그러나 나는 그것을 가능성 밖에서 버려야 만했다.

건설적인 피드백에 감사드립니다. 모욕, chides 및 오만은 scowled, 인쇄 및 spat에. 응용 프로그램이 자신의 인증을 수행하기 때문에

-CH

답변

1

, 당신은 단지 xinetd를 통해 덤프하고는 I/O를 처리하도록 할 수 있습니다. 그런 다음 사용자는 해당 포트로 텔넷하여 작동하게 할 수 있습니다.

+0

흥미로운 소리. 나는 stunnel이 ssl 래퍼를 제공 할 수 있고 xinetd가 연결을 처리 할 수 ​​있다고 보았다. 흠. 고맙습니다. – TehCorwiz

+0

이것은 합리적이고 적은 노력의 방법 일 수 있습니다 : 그러나 "SSL"과 "SSH"는 동일한 프로토콜이 아닙니다. – Glyph

4

트위스트에는 이런 종류의 글을 쓰기위한 레이어가 있습니다 : twisted.conch.insults. 나는 그것을 무시하지 않도록 조심하고 싶다. 여전히 더 많은 문서화가 필요하고 일부 기능이 부족합니다. docstring이 말했듯이, 그것은 '현재 매우 기본적인 것'입니다.

이유 때문에 모욕이 생겼습니다. 필자가 알고있는 Urwid는 심지어 Twisted 모드에서 파일 설명자와 직접 대화를하고 있기 때문에 동일한 스레드에서 출력을 암호화하고 전송할 수 없습니다. 누군가는 그 파일 기술자의 다른 쪽 끝을 읽을 필요가있다. Twisted 모드는 Twisted 네트워킹을 사용하는 Urwid를 사용하는 콘솔 어플리케이션에 관한 것입니다. 기타 stuff; 클라이언트 응용 프로그램이나 콘솔보기가있는 서버에 넣고 싶을 수도 있습니다.

연결 당 하나의 프로세스가 마음에 들지 않는 경우 Conw를 사용하여 Urwid 프로그램을 PTY를 사용하는 하위 프로세스로 생성하고 해당 인증 및 환경에 대한 정보를 제공하는 SSH 서버를 작성할 수 있습니다 (예 : 환경 변수를 통해. spawnProcess API과 Jean-Paul Calderone의 excellent series on using Conch을 확인하십시오.

0

값이 싸고 명백하게 매우 위험한 해킹은 앱을 특정 사용자의 기본 셸로 지정하는 것입니다. 당신은 매우 신중해야하지만 (제안 chroot 지옥과 다시) 애플 리케이션과 서버에 탈옥 가능성이있을 수 있습니다.

관련 문제