我正在考虑用 python 创建一个我可以运行的服务器,并将用作 SSH 服务器。这将让不同的用户登录,就像他们正常登录一样,但只能访问一个命令。
我想这样做是为了拥有一个系统,我可以在其中添加用户而无需创建系统范围的帐户,这样他们就可以提交到 VCS 分支或类似分支。
虽然我可以弄清楚如何使用 conch 将其添加到“自定义”外壳中……但我无法弄清楚如何使 SSH 流像真实流一样工作(我最好限制到/bin/bzr,这样 bzr+ssh 就可以工作了。
它需要在 python 中(我可以获得授权)但不知道如何链接到应用程序。
这需要在 python 中才能在其设计的应用程序中工作,并且能够用于那些无法添加新用户的用户
最佳答案
当你编写一个 Conch 服务器时,你可以通过实现 ISession.openShell
来控制客户端发出 shell 请求时发生的情况。 .海螺服务器将请求 IConchUser
来自您的领域,然后将生成的头像调整为 ISession
,以便在必要时对其调用 openShell
。
ISession.openShell
的工作是获取传递给它的传输对象并将其与协议(protocol)相关联以解释从它接收的字节,如果需要,将字节写入它发送给客户。
不幸的是,传递给表示传输的openShell
的对象实际上是一个IProcessProtocol
。提供商。这意味着您需要调用 makeConnection
在它上面,传递一个 IProcessTransport
提供商。当从客户端接收到数据时,IProcessProtocol
将调用 writeToChild
在您传递给 makeConnection
的传输上。当你想向客户端发送数据时,你应该调用childDataReceived
在上面。
要查看确切的行为,我建议阅读 the implementation of the IProcessProtocol
that is passed in .不要依赖任何不属于 IProcessProtocol
的部分,但查看实现可以更容易地理解正在发生的事情。
您可能还想看看 the implementation of the normal shell-creation了解您的目标。这将为您提供有关如何将您启动的 bzr 子进程的 stdio 与 SSH channel 相关联的线索。
关于Python - 如何使用 Conch 创建虚拟 SSH 服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/186316/