Привет всем!Ситуация: необходимо из скрипта ПХП вызвать удаленно команды киски. Например, посмотреть состояние интерфейсов.
В инете (в том числе на этом сайте) советуют через 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
Но результат тот же. При запуске такой команды из командной строки перед результатом команды выводится ошибка, что-то типа поток уже закрыт. Но через скрипт по-прежнему не работает...
Есть ли способ указать циске не требовать подтверждения? Например, запуск пинга проходит нормально.
popen() чтобы прочесть результат выполнения команды без промежуточного файла.на stdin команды кидаем подтверждение (не помню что конкретно хочет киска):
popen("echo 'yes\n' | rsh cisco_ip -l cisco_user cisco_command", "r");
>Привет всем!
>
>Ситуация: необходимо из скрипта ПХП вызвать удаленно команды киски. Например, посмотреть состояние
>интерфейсов.
>В инете (в том числе на этом сайте) советуют через 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.txtfwrite($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);
}