【发布时间】: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 做任何比这更有用的事情,那么您需要自己实现该功能。