Я пытаюсь создать страницу PHP, на которую я могу пойти, чтобы получить информацию от переключателей cisco, которые у нас есть. Мой единственный текущий вариант для чтения данных из них - использовать прогорклый клогин.
Когда я запускаю:
sudo -u www-data /usr/lib/rancid/bin/clogin -f /home/www-data/.cloginrc -c 'show run int fa 0/1' as-switch-123 2>&1
он запускает и возвращает информацию о порту 0/1.
Однако, когда я запускаю следующее:
<?php
ini_set('display_errors',1);
error_reporting(E_ALL);
$mainCommand = "/usr/lib/rancid/bin/clogin -f /home/www-data/.cloginrc -c 'show run int fa 0/1' as-switch-123 2>&1";
$outputArray = array();
echo exec($mainCommand,$outputArray,$returnCode);
echo '<br /><br />';
var_dump($outputArray);
echo '<br /><br />';
var_dump($returnCode);
?>
Я получаю возврат из $ outputArray, показанного ниже:
array(5) {
[0]=> string(16) "no such variable"
[1]=> string(31) " (read trace on "env(HOME)")"
[2]=> string(23) " invoked from within"
[3]=> string(40) ""set password_file $env(HOME)/.cloginrc""
[4]=> string(47) " (file "/usr/lib/rancid/bin/clogin" line 66)"
}
Кто-нибудь знает, почему это не дает мне выход так же, как когда вы запускаете его из sudo?
Благодаря symcbean я просмотрел /usr/lib/rancid/bin/clogin, а по строке 66 он имел следующее:
set password_file $ env (HOME)/. cloginrc
-f/home/www-data/.cloginrc не перекрывал вышеизложенное, и я не мог правильно установить $ env (HOME).
Для быстрого и, вероятно, небрежного исправления я вручную установил строку 66 для чтения set password_file/home/www-data/.cloginrc, и она сработала.
Ошибка, которую вы получили, говорит мне, что возникла проблема с переменной окружения, и единственная переменная среды в строке кода, которую она пыталась обработать, - $ HOME.
Я ожидаю, что вы сможете его скопировать, используя:
sudo -u www-data "HOME= ; /usr/lib/rancid/bin/clogin -f /home/www-data/.cloginrc -c 'show run int fa 0/1' as-switch-123 2>&1"
Точно так же установка значения внутри команды, выполняемой в PHP, должна решить проблему.
$mainCommand = "HOME=/home/www-data && /usr/lib/rancid/bin/clogin -f /home/www-data/.cloginrc -c 'show run int fa 0/1' as-switch-123 2>&1";