我正在寻找在python中创建可以运行的服务器,并将作为SSH服务器工作。然后,这将允许不同的用户登录,并且就像他们正常登录一样,但只能访问一个命令。
我想这样做,以便我可以拥有一个系统,我可以添加用户而无需创建系统范围的帐户,以便他们可以,例如,提交到VCS分支,或类似的。
虽然我可以通过海螺来解决这个问题,然后把它变成一个“自定义”的shell ...我无法弄清楚如何使它成为一个SSH流,就像它是一个真实的一样(我最好想限制为/ bin / bzr,以便bzr + ssh可以工作。
它需要在python中(我可以获得授权)但不知道如何链接到应用程序。
这需要在python中在其设计的应用程序内工作,并且能够用于那些无法访问的用户添加新用户
答案 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隧道,它的效果非常好。