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

时间:2008-10-09 07:54:12

标签: python twisted

我正在寻找在python中创建可以运行的服务器,并将作为SSH服务器工作。然后,这将允许不同的用户登录,并且就像他们正常登录一样,但只能访问一个命令。

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

虽然我可以通过海螺来解决这个问题,然后把它变成一个“自定义”的shell ...我无法弄清楚如何使它成为一个SSH流,就像它是一个真实的一样(我最好想限制为/ bin / bzr,以便bzr + ssh可以工作。

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

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

2 个答案:

答案 0 :(得分:7)

当您编写Conch服务器时,您可以通过实施ISession.openShell来控制客户端发出shell请求时会发生什么。海螺服务器将从您的领域请求IConchUser,然后根据需要将生成的头像调整为ISession,以便在其上调用openShell

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

在一个不幸的转折中,传递给代表传输的openShell的对象实际上是IProcessProtocol提供者。这意味着您需要在其上调用makeConnection,并通过IProcessTransport提供商。从客户端收到数据后,IProcessProtocol会在您传输到makeConnection的传输上调用writeToChild。如果要将数据发送到客户端,则应在其上调用childDataReceived

要查看确切的行为,我建议您阅读the implementation of the IProcessProtocol that is passed in。不要依赖任何不属于IProcessProtocol的东西,但是看到实现可以更容易理解正在发生的事情。

您可能还想查看the implementation of the normal shell-creation以了解您的目标。这将为您提供有关如何将您启动的bzr子进程的stdio与SSH通道关联的线索。

答案 1 :(得分:-2)

虽然Python确实是我最喜欢的语言,但我认为你不需要为此创建自己的服务器。当您查看OpenSSH Manualpage for sshd时,您将找到授权密钥文件的“命令”选项,该文件允许您定义在登录时运行的特定命令。

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

我们正在使用它来为SVN创建SSH隧道,它的效果非常好。

相关问题