5

我正在考虑在 python 中创建一个可以运行的服务器,并将用作 SSH 服务器。然后,这将让不同的用户登录,并像他们正常登录一样行事,但只能访问一个命令。

我想这样做,以便我可以拥有一个可以添加用户的系统,而无需创建系统范围的帐户,这样他们就可以提交到 VCS 分支或类似的分支。

虽然我可以弄清楚如何使用 conch 将其放入“自定义”外壳中......但我无法弄清楚如何制作它,以便 SSH 流就像它是真实的一样工作(我最好希望限制为 /bin/bzr 以便 bzr+ssh 可以工作。

它需要在 python 中(我可以进行授权),但不知道如何链接到应用程序。

这需要在 python 中才能在其设计的应用程序中工作,并且能够用于那些无权添加新用户的人

4

2 回答 2

7

当你编写一个 Conch 服务器时,你可以通过实现ISession.openShell. Conch 服务器IConchUser将从您的领域请求,然后调整生成的头像以在必要时ISession调用它。openShell

ISession.openShell的工作是获取传递给它的传输对象并将其与协议相关联,以解释从它接收到的字节,如果需要,将字节写入它以发送给客户端。

不幸的是,传递给openShell它的代表传输的对象实际上是一个IProcessProtocol提供者。这意味着您需要调用makeConnection它,传递一个IProcessTransport提供程序。当从客户端收到数据时,IProcessProtocol将调用writeToChild您传递给的传输makeConnection。当你想向客户端发送数据时,你应该调用childDataReceived它。

要查看确切的行为,我建议阅读传入IProcessProtocol. 不要依赖任何不属于 的东西IProcessProtocol,但是查看实现可以更容易理解正在发生的事情。

您可能还想查看正常创建 shell 的实现,以了解您的目标。这将为您提供有关如何将您启动的 bzr 子进程的 stdio 与 SSH 通道相关联的线索。

于 2008-10-09T22:30:29.813 回答
-2

虽然 Python 确实是我最喜欢的语言,但我认为您无需为此创建自己的服务器。当您查看sshd 的 OpenSSH 手册页时,您会发现授权密钥文件的“命令”选项,它允许您定义在登录时运行的特定命令。

使用密钥,您可以使用一个系统帐户允许多个用户登录,只需将他们的公钥放入帐户的授权密钥文件中即可。

我们正在使用它为 SVN 创建 SSH 隧道,效果很好。

于 2008-10-09T09:00:11.760 回答