0

我有一个小问题。我正在将 Codeigniter 与 Shuky 编写的 SSH 库一起使用(https://bitbucket.org/quicktips/codeigniter-ssh2-library/src/a444968345ba/SSH.php——您可以通过以下链接查看代码)。

与 SSH 相关的所有内容都可以在其他设备上正常工作,但是当我尝试使用这个库并在 Cisco 设备上执行命令时,什么也没有发生(命令不执行)。我知道连接成功,但是我不能执行任何命令。

当我尝试在 Cisco 设备上通过 SSH 运行和执行命令时,我收到此错误:

A PHP Error was encountered

Severity: Warning

Message: stream_set_blocking() expects parameter 1 to be resource, boolean given

Filename: libraries/SSH.php

Line Number: 128

A PHP Error was encountered

Severity: Warning

Message: fread() expects parameter 1 to be resource, boolean given

Filename: libraries/SSH.php

Line Number: 129

在库中,这些行如下所示:

       /**
 * Get stream data
 *
 * @access privte
 * @return bool
 */
function _get_stream_data($stream) {
    stream_set_blocking( $stream, true );
    while( $buf = fread($stream,4096) ) {
        $this->data .= $buf.'~';
    }
    return TRUE;
}    



line 128 - stream_set_blocking( $stream, true );
line 129 - while( $buf = fread($stream,4096) ) {

也许你们知道问题出在哪里?

感谢您的时间和答案!

4

3 回答 3

1

函数 _get_stream_data 在以下上下文中的库中使用:

  if($this->_is_conn()) {
        $stream = @ssh2_exec($this->conn_id, $command);
        return $this->_get_stream_data($stream);
  }

如果成功建立了 ssh 连接,则$stream返回的值是资源,如果出现错误,则返回布尔值FALSEssh2_exec

不幸的是,您无法使用ssh2PECL 库进行太多错误处理。最简单的是输出 的值$command。并从命令行执行相同的命令。

于 2012-06-03T16:49:06.313 回答
1

尝试使用phpseclib,一个纯 PHP SSH 实现。尽管它目前受到支持,但它还支持日志记录,这可能会帮助您 - 或作者 - 弄清楚发生了什么(假设 phpseclib 有同样的问题,它可能不会!)

于 2012-06-06T13:15:22.357 回答
0

您必须先运行命令

$this->ssh->execute($cmd);

然后,您可以像这样查看流:

echo $this->ssh->data;
于 2013-02-17T00:43:39.013 回答