2011-08-19 11 views
5

Tôi đang trong quá trình viết một ứng dụng có giao diện người dùng Urwid và một back-end MongoDB trong python. Mục tiêu cuối cùng là để có thể phục vụ ứng dụng qua SSH. Ứng dụng này có hệ thống xác thực/nhận dạng riêng. Tôi không quan tâm đến chi phí phát hành một quy trình mới cho mỗi người dùng, số lượng người dùng đồng thời dự kiến ​​sẽ thấp. Vì máy khách không nhớ bất kỳ thông tin trạng thái nào và thay vào đó nó được lưu trữ trong DB, tôi không quan tâm đến các phiên như vậy ngoại trừ các mục đích xác thực.Cách phân phối ứng dụng Python CLI qua SSH

Tôi đã tự hỏi liệu có bất kỳ phương pháp nào để phân phối ứng dụng như không cần phải cuộn mã socket-server của riêng tôi hay mã hóa lại ứng dụng bằng Twisted. Tôi thành thật không biết làm thế nào Urwid và Twisted chơi với nhau. Tôi thấy rằng Urwid có một phương pháp TwistedEventLoop mà purports sử dụng lò phản ứng xoắn nhưng tôi không thể tìm thấy bất kỳ mã ví dụ chạy một ứng dụng Urwid qua một kết nối xoắn. Ví dụ sẽ được đánh giá cao, ngay cả những cái đơn giản. Tôi cũng đã nhìn ZeroMQ nhưng điều đó có vẻ còn khó hiểu hơn cả Twisted. Tóm lại, tôi đã khám phá một số thư viện khác nhau nhằm phục vụ các ứng dụng trên tcp, hầu hết trong số đó là telnet. Và gần như tất cả đều tập trung vào http.

Kịch bản trường hợp xấu nhất Tôi hy vọng rằng tôi có thể tạo một người dùng cực kỳ bị khóa dưới dạng đăng nhập toàn cục và sử dụng các phiên SSH được chroot. theo cách đó, mỗi người dùng có chroot/process/client của riêng họ. Vâng, tôi biết đó có thể là "Ý tưởng rất xấu (tm)". Nhưng tôi phải ném nó ra ngoài như một khả năng.

Tôi đánh giá cao mọi phản hồi mang tính xây dựng. Những lời lăng mạ, gian lận, và kiêu ngạo sẽ bị cau có, in ra và nhổ vào.

-CH

Trả lời

1

Kể từ khi ứng dụng không auth riêng của mình, bạn chỉ có thể đổ nó qua xinetd và để có thể xử lý I/O. Sau đó, người dùng chỉ có thể telnet đến cổng thích hợp và có nó hoạt động.

+0

Nghe có vẻ thú vị. Tôi nhìn vào đó, stunnel có thể cung cấp một wrapper ssl và xinetd có thể xử lý các kết nối. Hừm. Cảm ơn bạn. – TehCorwiz

+0

Đây có thể là cách hợp lý và ít tốn kém: tuy nhiên, xin lưu ý rằng "SSL" và "SSH" không phải là cùng một giao thức. – Glyph

4

Xoắn có một lớp để tạo ra loại điều sau: twisted.conch.insults. Tôi muốn cẩn thận không để vượt qua nó; nó vẫn cần thêm tài liệu và một số tính năng còn thiếu. Như docstring nói, nó là 'rất cơ bản tại thời điểm này'.

Các lời lăng mạ xuất hiện vì một lý do. Sự hiểu biết của tôi là Urwid, ngay cả trong chế độ Twisted của nó, đang nói chuyện trực tiếp với một bộ mô tả tập tin, mặc dù vậy, và do đó không thể có đầu ra được mã hóa và được vận chuyển bởi cùng một luồng; ai đó cần phải đọc đầu kia của bộ mô tả tập tin đó. Tôi tin rằng chế độ Twisted là nhiều hơn về việc có một ứng dụng giao diện điều khiển bằng cách sử dụng Urwid trong đó sử dụng mạng Twisted cho các công cụ khác; như bạn có thể muốn có trong ứng dụng máy khách hoặc trong máy chủ có giao diện điều khiển. Nếu bạn không nhớ một quy trình cho mỗi kết nối, bạn có thể viết một máy chủ SSH bằng cách sử dụng Conch để sinh ra chương trình Urwid của bạn dưới dạng một tiến trình con bằng PTY, với thông tin về xác thực và môi trường được cung cấp, ví dụ, thông qua các biến môi trường. Hãy xem spawnProcess API và số excellent series on using Conch của Jean-Paul Calderone.

0

Một bản hack rẻ tiền và rất nguy hiểm là đặt ứng dụng của bạn làm trình bao mặc định cho một người dùng cụ thể. bạn cần phải rất cẩn thận mặc dù (đề nghị chroot nó vào địa ngục và trở lại) vì nó có thể có thể thoát ra khỏi ứng dụng và vào máy chủ.