【问题标题】:Howto Serve Python CLI Application Over SSH如何通过 SSH 服务 Python CLI 应用程序
【发布时间】:2012-01-19 21:52:13
【问题描述】:

我正在用 Python 编写一个带有 Urwid 前端和 MongoDB 后端的应用程序。最终目标是能够通过 SSH 为应用程序提供服务。该应用程序有自己的身份验证/身份系统。我不关心为每个用户启动一个新进程的开销,预期的并发用户数很低。由于客户端不会调用任何状态信息,而是全部存储在数据库中,因此我不关心会话本身,除非出于身份验证目的。

我想知道是否有任何方法可以按原样提供应用程序,而无需滚动我自己的套接字服务器代码或使用 Twisted 重新编码应用程序。老实说,我不知道 Urwid 和 Twisted 是怎么一起玩的。我看到 Urwid 有一个 TwistedEventLoop 方法,声称使用扭曲反应器,但我找不到任何通过扭曲连接运行 Urwid 应用程序的示例代码。示例将不胜感激,即使是简单的示例。我也看过 ZeroMQ,但这似乎比 Twisted 更难以理解。简而言之,我探索了许多声称通过 tcp 为应用程序提供服务的不同库,其中大部分是通过 telnet。而且几乎所有人都专注于 http。

最坏的情况我希望我可以创建一个极度锁定的用户作为全局登录并使用 chrooted SSH 会话。这样每个用户都有自己的 chroot/process/client。是的,我知道这可能是一个“非常糟糕的主意(tm)”。但我不得不把它作为一种可能性扔出去。

感谢任何建设性的反馈。侮辱、责备和傲慢将受到谴责、打印和吐口水。

-CH

【问题讨论】:

    标签: python ssh twisted


    【解决方案1】:

    Twisted 有一层可以写这种东西:twisted.conch.insults。我要小心不要超卖;它仍然需要更多文档,并且缺少一些功能。正如文档字符串所说,它“目前非常基本”。

    但是,侮辱是有原因的。我的理解是,即使在其 Twisted 模式下,Urwid 也是直接与文件描述符对话,因此不能对其输出进行加密并由同一个线程传输;有人需要读取该文件描述符的另一端。我相信 Twisted 模式更多的是关于使用 Urwid 的控制台应用程序,它使用 Twisted 网络来处理 other 东西;就像您可能希望在客户端应用程序或带有控制台视图的服务器中那样。

    如果您不介意每个连接一个进程,您可以使用 Conch 编写一个 SSH 服务器,使用 PTY 将您的 Urwid 程序作为子进程生成,并提供有关其身份验证和环境的信息,例如,通过环境变量。查看spawnProcess API 和 Jean-Paul Calderone 的excellent series on using Conch

    【讨论】:

      【解决方案2】:

      由于应用程序自己进行身份验证,您可以通过xinetd 转储它并让其处理 I/O。然后用户就可以 telnet 到适当的端口并让它工作。

      【讨论】:

      • 听起来很有趣。我调查了一下,stunnel 可以提供一个 ssl 包装器,而 xinetd 可以处理连接。嗯。谢谢。
      • 这可能是一种合理且省力的方法:但是,请注意“SSL”和“SSH”不是同一个协议。
      【解决方案3】:

      一种廉价且可能非常危险的技巧是将您的应用程序作为特定用户的默认外壳。不过,您需要非常小心(建议将其 chroot 到地狱并返回),因为它可能会从应用程序中跳出并进入服务器。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-08-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-07-29
        相关资源
        最近更新 更多