2012-06-03 101 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;