Python - 如何使用 Conch 创建虚拟 SSH 服务器

标签 python twisted

我正在考虑用 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/

相关文章:

Python - MatPlotLib - 如何在 x 轴上设置两个刻度,一个在最左边,一个在最右边?

python - 对于不同大小的输入,我应该使用什么类型的神经网络?

python - 使用 Django 的个人博客

python - Twisted Python,在从纯文本切换到安全连接时使用 ssl.CertificateOptions

python - 通过 pip 在一台服务器上安装 Twisted

python - Twisted irc python bot - 缓冲消息

python - v4l2/拖缆运行不稳定

python - 从 Pandas 数据框列中查找所有正则表达式匹配项

python - 存储一个连接实例 - twisted.web

python - Twisted Python 接口(interface)实例是否可以不实现该接口(interface)的所有功能?