通过PHP exec()运行Clogin

通过PHP exec()运行Clogin,php,Php,我正在尝试创建一个PHP页面,我可以访问该页面,以便从cisco交换机获取信息。我目前唯一可以从它们读取数据的方法是使用rancid的clogin 当我跑步时: 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

我正在尝试创建一个PHP页面,我可以访问该页面,以便从cisco交换机获取信息。我目前唯一可以从它们读取数据的方法是使用rancid的clogin

当我跑步时:

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

?>

有人知道为什么它不给我与从sudo运行时相同的输出吗?

您得到的错误告诉我环境变量有问题,并且它试图处理的代码行中唯一的环境变量是$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";

多亏了symcbean,我查看了/usr/lib/rancid/bin/clogin,在第66行它有以下内容:

设置密码\u文件$env(HOME)/.cloginrc

-f/home/www data/.cloginrc没有覆盖上述内容,我无法正确设置$env(home)


对于一个快速且可能草率的修复,我手动将第66行设置为读取set password_file/home/www data/.cloginrc,它成功了。

新的$main命令出现了与以前相同的错误。运行sudo命令时,如果它仍然工作,但首先给了我以下sudo错误:用法:sudo-h |-K |-K |-K |-V用法:sudo-V[-AknS][g组][h主机][p提示符][u用户]用法:sudo-l[-AknS][g组][h主机][p提示符][u用户][u用户][命令]用法:sudo[-AbEHknPS][r角色][t类型][C num g组][-h主机][p提示符][u用户][VAR=value][i |-s][用法:sudo-e[-AknS][r角色][t类型][C数量][g组][h主机][p提示符][u用户]文件。。。
$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";