2012-06-03 103 views
0

我有一个小问题。我正在使用由Shuky编写的SSH库的Codeigniter(https://bitbucket.org/quicktips/codeigniter-ssh2-library/src/a444968345ba/SSH.php - 您可以通过以下链接查看代码)。在Cisco路由器上执行SSH命令。 Codeigniter SSH库

所有与SSH相关的东西都可以很好地与其他设备一起工作,但是当我试图在思科设备上使用此库并执行命令时,没有任何事情发生(命令未执行)。我知道连接成功,但我无法执行任何命令。

当我尝试运行,并通过思科设备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)) { 

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

谢谢你的时间和你的答案!

+0

你如何使用SSH类。你能展示一些你的代码吗?你试图“执行”的命令是什么? –

回答

1

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

1

功能_get_stream_data用于在库在以下上下文中:

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

如果在错误的情况下ssh连接成功建立或布尔FALSE通过ssh2_exec返回的$stream值可以是一个资源。

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

+0

谢谢你的答案德米特里,但你能给我更多的细节吗? – jomajo

+0

恐怕我没有太多的补充,因为我没有办法重现这个问题。我说的是这个问题不在'stream_set_blocking'中,而是在'ssh2_exec'中。 –

+0

但是是否有可能向库中添加内容并使其对于思科设备也起作用? – jomajo

0

你有运行命令第一

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

您可以再查看数据流是这样的:

echo $this->ssh->data;