代码之家  ›  专栏  ›  技术社区  ›  Mez

python-如何使用conch创建虚拟ssh服务器

  •  5
  • Mez  · 技术社区  · 16 年前

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

    我想这样做,这样我就可以有一个系统,我可以在其中添加用户,而不必创建一个系统范围的帐户,这样他们就可以,例如,提交到VCS分支或类似的分支。

    虽然我可以解决如何用海螺做这件事,使它成为一个“自定义”外壳…我不知道如何让ssh流像真实的一样工作(我最好将其限制为/bin/bzr,以便bzr+ssh可以工作)。

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

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

    2 回复  |  直到 16 年前
        1
  •  7
  •   Jean-Paul Calderone    16 年前

    在编写conch服务器时,可以通过实现 ISession.openShell . conch服务器将请求 IConchUser 从你的领域,然后调整产生的化身 ISession 打电话 openShell 如有必要,请在上面。

    isession.openshell 的任务是获取传递给它的传输对象,并将其与协议关联,以解释从该对象接收到的字节,如果需要,还可以将字节写入该对象,以发送给客户机。

    不幸的是,物体经过 开壳层 它表示传输实际上是 IProcessProtocol 供应商。这意味着你需要打电话 makeConnection 在上面,通过一个 IProcessTransport 供应商。当从客户机接收数据时, IProcessProtocol协议 将呼叫 writeToChild 在你经过的交通工具上 数学结构 . 当您想向客户机发送数据时,应该调用 childDataReceived 关于它。

    为了了解具体的行为,我建议阅读 the implementation of the IProcessProtocol that is passed in . 不要依赖任何不属于 IProcessProtocol协议 但是,看到实现可以更容易地理解正在发生的事情。

    你也可以看看 the implementation of the normal shell-creation 了解你的目标。这将给您一个关于如何将启动的BZR子进程的stdio与ssh通道关联的线索。

        2
  •  -2
  •   Ber    16 年前

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

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

    我们正在使用它为SVN创建ssh隧道,它工作得非常好。