The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  ВХОД  слежка  RSS
"выполнить команды CISCO из PHP через RSH"
Вариант для распечатки  
Пред. тема | След. тема 
Форумы WEB технологии (Public)
Изначальное сообщение [Проследить за развитием треда]

"выполнить команды CISCO из PHP через RSH"  
Сообщение от Ivan email(??) on 24-Апр-06, 15:51 
Привет всем!

Ситуация: необходимо из скрипта ПХП вызвать удаленно команды киски. Например, посмотреть состояние интерфейсов.
В инете (в том числе на этом сайте) советуют через rsh:

rsh cisco_ip -l cisco_user cisco_command

Все необходимое прописал, но:
При выполнении приведенной команды через командную строку вручную необходимо ввести подтверждение, чтобы завершить сеанс связи. При вызове из ПХП использовал exec и  system. В первом случае пробовал считать вывод в массив (второй параметр функции exec), но он остается пустым, хотя ошибок вроде нет. Если через system (то есть результат команды записываю в файл типа: rsh cisco_ip -l cisco_user cisco_command > somelog.txt), то файл остается пустым. Видел советы типа:
sleep2; echo '' | rsh cisco_ip -l cisco_user cisco_command > somelog.txt
Но результат тот же. При запуске такой команды из командной строки перед результатом команды выводится ошибка, что-то типа поток уже закрыт. Но через скрипт по-прежнему не работает...
Есть ли способ указать циске не требовать подтверждения? Например, запуск пинга проходит нормально.

Правка | Высказать мнение | Ответить | Cообщить модератору | Наверх

 Оглавление

Сообщения по теме [Сортировка по времени, UBB]


1. "выполнить команды CISCO из PHP через RSH"  
Сообщение от Vic (??) on 24-Апр-06, 17:14 
popen() чтобы прочесть результат выполнения команды без промежуточного файла.

на stdin команды кидаем подтверждение (не помню что конкретно хочет киска):
popen("echo 'yes\n' | rsh cisco_ip -l cisco_user cisco_command", "r");

Правка | Высказать мнение | Ответить | Cообщить модератору | Наверх

2. "выполнить команды CISCO из PHP через RSH"  
Сообщение от Simps (ok) on 24-Апр-06, 17:54 
>Привет всем!
>
>Ситуация: необходимо из скрипта ПХП вызвать удаленно команды киски. Например, посмотреть состояние
>интерфейсов.
>В инете (в том числе на этом сайте) советуют через rsh:
>
>rsh cisco_ip -l cisco_user cisco_command
>
>Все необходимое прописал, но:
>При выполнении приведенной команды через командную строку вручную необходимо ввести подтверждение, чтобы завершить сеанс связи. При вызове из ПХП использовал exec и  system. В первом случае пробовал считать вывод в массив (второй параметр функции exec), но он остается пустым, хотя ошибок вроде нет. Если через system (то есть результат команды записываю в файл типа: rsh cisco_ip -l cisco_user cisco_command > somelog.txt), то файл остается пустым. Видел советы типа:
>sleep2; echo '' | rsh cisco_ip -l cisco_user cisco_command > somelog.txt
>Но результат тот же. При запуске такой команды из командной строки перед
>результатом команды выводится ошибка, что-то типа поток уже закрыт. Но через
>скрипт по-прежнему не работает...
>Есть ли способ указать циске не требовать подтверждения? Например, запуск пинга проходит
>нормально.


Как пример, чтобы ухватить суть идеи

function chFtpPasswd($password) {
   $ret = "";
   $descriptorspec = array(
      0 => array("pipe", "r"),  // stdin is a pipe that the child will read from
      1 => array("pipe", "w"),  // stdout is a pipe that the child will write to
      2 => array("file", "/dev/null", "a") // stderr is a file to write to
   );
   $process = proc_open("/usr/bin/passwd nobody", $descriptorspec, $pipes);
   if (is_resource($process)) {
       // $pipes now looks like this:
       // 0 => writeable handle connected to child stdin
       // 1 => readable handle connected to child stdout
       // Any error output will be appended to /tmp/error-output.txt

       fwrite($pipes[0],$password);
       sleep(2);
       fwrite($pipes[0],$password);
       fclose($pipes[0]);
       while (!feof($pipes[1])) {
           $ret .=  fgets($pipes[1], 1024);
       }
       fclose($pipes[1]);
       // It is important that you close any pipes before calling
       // proc_close in order to avoid a deadlock
   }
   return($ret);
}

Правка | Высказать мнение | Ответить | Cообщить модератору | Наверх

Архив | Удалить

Индекс форумов | Темы | Пред. тема | След. тема
Оцените тред (1=ужас, 5=супер)? [ 1 | 2 | 3 | 4 | 5 ] [Рекомендовать для помещения в FAQ]




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2025 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру