【问题标题】:Twisted ssh - session execCommand implementationTwisted ssh - 会话 execCommand 实现
【发布时间】:2021-08-27 07:28:18
【问题描述】:

美好的一天。我很抱歉要求一些明显的东西,因为我正在用 PHP 编写,并且我对 Python 的了解处于“我昨天开始学习这个”的水平。我已经为此花了几天时间-但无济于事。 我从这里https://docs.twistedmatrix.com/en/twisted-20.3.0/conch/examples/ 下载了版本 20.3 的 SSH 服务器的扭曲示例。第 162 行有一个 execCommand 方法,我需要实现它才能使其工作。然后我注意到这个方法中有一条评论“我们不支持命令执行会话”。因此,问题是:此评论仅适用于示例,还是完全适用于扭曲的库。即,是否可以实现此方法以使示例服务器按我的需要工作?

更多信息。我认为不需要这些信息来回答我上面的问题。 为什么我需要它?我正在尝试编译一个用于编写功能(!)测试的环境(我猜单元测试不会有这样的问题)。我们的 API 使用 SSH 客户端 (phpseclib / SSH2) 超过 30% 的端点。无论我做什么,根据我如何实现此方法,我只有 3 个结果选项:(结果:成功,响应:“” - 空;结果:成功,响应:“1”;结果:失败,响应:“ Unable to fulfill channel request at… SSH2.php:3853")。这些是针对 SSH2 客户端的。如果发生错误(第三种情况),服务器会在终端显示日志:

[SSHServerTransport, 0,127.0.0.1] Got remote error, code 11 reason: ""
[SSHServerTransport, 0,127.0.0.1] connection lost

【问题讨论】:

  • 更有帮助的是您用来获取Unable to fulfill channel request at… SSH2.php:3853 错误的phpseclib 代码。拥有 SSH 日志也很好。遇到该错误后,您可以通过在顶部执行 define('NET_SSH2_LOGGING', 2)echo $ssh->getLog() 来获取它们。
  • 目前还不清楚您使用的是什么版本的 phpseclib。你说Unable to fulfill channel request at… SSH2.php:3853。凉爽的。第 3853 行没有 3.0.8 (github.com/phpseclib/phpseclib/blob/3.0.8/phpseclib/Net/…)、2.0.31 (github.com/phpseclib/phpseclib/blob/2.0.31/phpseclib/Net/…) 或 1.0.19 (github.com/phpseclib/phpseclib/blob/1.0.19/phpseclib/Net/…) 中的错误...
  • 无论如何,查看 sshsimpleserver.py 看起来其中的许多方法只是打算由最终用户填写的存根。他们的openShell 方法使用了一个“回显协议”,即“只需回显接收到的数据,如果收到 Ctrl+C,则关闭会话”。因此,如果您想使用 phpseclib 测试“回声协议”,您可以使用$ssh->write("hello, world!\n");,它应该会回显给您。如果您希望 TwistedSSH 做任何比这更有用的事情,那么您需要自己实现该功能。

标签: phpseclib twisted.conch


【解决方案1】:

我刚刚发现这是可行的:

def execCommand(self, protocol, cmd):
    protocol.write('Some text to return')
    protocol.session.conn.sendEOF(protocol.session)

如果我不发送 EOF,客户端会抛出超时错误。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-12
    • 2015-11-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-21
    相关资源
    最近更新 更多