我有点问题。我正在使用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) ) {
也许你们知道问题出在哪里了?
感谢您的时间和答案!
答案 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;