在Cisco路由器上执行SSH命令。 Codeigniter SSH库

时间:2012-06-03 08:36:40

标签: codeigniter ssh cisco

我有点问题。我正在使用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) ) {

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

感谢您的时间和答案!

3 个答案:

答案 0 :(得分:1)

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

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

$stream返回的ssh2_exec值是成功建立ssh连接时的资源,如果是错误则是布尔 FALSE

不幸的是,您可以使用ssh2 PECL库进行错误处理。最简单的方法是输出$command的值。并从命令行执行相同的命令。

答案 1 :(得分:1)

尝试使用phpseclib, a pure PHP SSH implementation。它目前支持不受影响的事实,它也支持日志记录,这可能会帮助你 - 或者作者 - 弄清楚发生了什么(假设phpseclib有同样的问题,它可能不会!)

答案 2 :(得分:0)

您必须先运行命令

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

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

echo $this->ssh->data;