2008-10-09 29 views
5

Tôi đang xem tạo một máy chủ trong python mà tôi có thể chạy và sẽ hoạt động như một máy chủ SSH. Điều này sau đó sẽ cho phép người dùng đăng nhập khác nhau và hành động như thể họ đã đăng nhập bình thường, nhưng chỉ có quyền truy cập vào một lệnh.Python - Cách sử dụng Conch để tạo máy chủ SSH ảo

Tôi muốn thực hiện điều này để có thể thêm người dùng mà không phải tạo tài khoản hệ thống, để họ có thể, ví dụ, cam kết với chi nhánh VCS hoặc tương tự.

Trong khi tôi có thể tìm hiểu cách làm điều này với ốc xà cừ để đưa nó vào trình bao "tùy chỉnh" ... Tôi không thể tìm ra cách để làm cho luồng SSH hoạt động như thể nó là một thực tế (Tốt nhất là tôi muốn giới hạn ở/bin/bzr để bzr + ssh hoạt động.

Nó cần phải có trong python (mà tôi có thể thực hiện ủy quyền) nhưng không biết cách thực hiện liên kết đến các ứng dụng.

này cần phải được trong python để làm việc trong ứng dụng thiết kế của nó cho, và để có thể được sử dụng cho những người không được tiếp cận thêm người dùng mới

Trả lời

7

Khi bạn viết máy chủ Conch, bạn có thể kiểm soát những gì xảy ra khi khách hàng thực hiện yêu cầu vỏ bằng cách triển khai ISession.openShell. Máy chủ Conch sẽ yêu cầu IConchUser từ lĩnh vực của bạn và sau đó điều chỉnh hình đại diện kết quả thành ISession để gọi openShell trên đó nếu cần.

ISession.openShell 's công việc là để đưa các đối tượng vận chuyển thông qua nó và kết hợp nó với một giao thức để giải thích các byte nhận được từ nó và, nếu muốn, để ghi byte cho nó được gửi cho khách hàng.

Trong một bước ngoặt không may, đối tượng được chuyển đến openShell đại diện cho việc vận chuyển thực sự là nhà cung cấp IProcessProtocol. Điều này có nghĩa là bạn cần gọi số makeConnection trên đó, đi qua nhà cung cấp IProcessTransport. Khi dữ liệu được nhận từ khách hàng, số IProcessProtocol sẽ gọi số writeToChild khi bạn chuyển đến số makeConnection. Khi bạn muốn gửi dữ liệu cho khách hàng, bạn nên gọi childDataReceived trên đó.

Để xem hành vi chính xác, tôi khuyên bạn nên đọc the implementation of the IProcessProtocol that is passed in. Không phụ thuộc vào bất kỳ thứ gì không thuộc về số IProcessProtocol, nhưng việc xem triển khai có thể giúp bạn hiểu điều gì đang xảy ra dễ dàng hơn.

Bạn cũng có thể muốn xem the implementation of the normal shell-creation để hiểu được những gì bạn đang nhắm đến. Điều này sẽ cung cấp cho bạn một đầu mối về cách liên kết stdio của quá trình con bzr mà bạn khởi chạy với kênh SSH.

-2

trong khi Python thực sự là fa của tôi vorite ngôn ngữ, tôi nghĩ rằng bạn không cần phải tạo ra máy chủ của riêng bạn cho việc này. Khi bạn nhìn vào số OpenSSH Manualpage for sshd bạn sẽ tìm thấy tùy chọn "lệnh" cho tệp khóa được ủy quyền cho phép bạn xác định một lệnh cụ thể để chạy khi đăng nhập.

Sử dụng khóa, bạn có thể sử dụng một tài khoản hệ thống để cho phép nhiều người dùng đăng nhập, chỉ cần đặt khóa công khai của họ vào tệp khóa được ủy quyền của tài khoản.

Chúng tôi đang sử dụng điều này để tạo đường hầm SSH cho SVN và nó hoạt động rất tốt.

+0

đây không phải là cách tôi muốn làm. Nó cần phải được trong python (mà tôi có thể nhận được để làm ủy quyền) nhưng không biết làm thế nào để làm các liên kết đến các ứng dụng. Điều này cần phải được trong python để làm việc trong ứng dụng của nó được thiết kế cho, và để có thể được sử dụng cho những người không có quyền truy cập để thêm người dùng mới – Mez

Các vấn đề liên quan