2012-06-03 4 views
0

У меня есть небольшая проблема. Я использую Codeigniter с библиотекой SSH, написанной Shuky (https://bitbucket.org/quicktips/codeigniter-ssh2-library/src/a444968345ba/SSH.php). Вы можете увидеть код, следуя этой ссылке).Выполнение команд SSH на маршрутизаторе Cisco. Codeigniter SSH library

Все, что связано с SSH, отлично работает с другими устройствами, но когда я пытаюсь использовать эту библиотеку и выполнять команды на устройствах Cisco, ничего не происходит (команды не выполняются). Я знаю, что соединение выполнено успешно, но я не могу выполнять какие-либо команды.

Когда я пытаюсь запустить и выполнить comands через SSH на устройствах Cisco, я получаю эту ошибку:

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. Не могли бы вы показать код? Что такое 'command', который вы пытаетесь выполнить? –

ответ

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); 
    } 

Значение $stream возвращаемого ssh2_exec либо ресурс, если подключение SSH было успешно установлено или логическим FALSE в случае ошибки ,

К сожалению, с помощью библиотеки PECL ssh2 ошибок не очень много. Самый простой способ - вывести значение $command. И выполните ту же команду из командной строки.

+0

Спасибо, что ответили Дмитрию, но не могли бы вы дать мне более подробную информацию? – jomajo

+0

Я боюсь, что я не могу добавить, так как у меня нет средств для воспроизведения проблемы. Я говорю, что проблема заключается не в 'stream_set_blocking', а в' ssh2_exec'. –

+0

Но можно ли добавить что-то в библиотеку и заставить его работать и на устройствах cisco? – jomajo

0

У вас есть выполнить команду первой

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

вы можете просматривать поток, как это:

echo $this->ssh->data; 
Смежные вопросы