2014-11-21 86 views
0

我试图创建一个PHP页面,我可以去为了从我们的cisco交换机获取信息。我目前从他们读取数据的唯一选择是使用rancid的clogin。通过PHP运行Clogin exec()

当我运行:

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运行它?

回答

0

您得到的错误告诉我,环境变量存在问题,并且它试图处理的代码行中唯一的环境变量是$ HOME。

我希望你将能够使用这个来replcate:

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"; 
+0

新的$ mainCommand与以前一样有错误。 此外,当运行sudo命令提供它仍然工作,但首先给我以下sudo错误: 用法:sudo -h | -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 =值] [-i | -s] [] 用法:sudo -e [-AknS] [-r角色] [-t类型] [ -C num] [-g组] [-h主机] [-p提示符] [-u用户]文件... – xloner12 2014-11-21 15:06:54

0

感谢symcbean我看着在/ usr/lib中/腐臭/斌/ clogin和66行有下列:

集PASSWORD_FILE $ ENV(HOME)/ cloginrc

。 -f /home/www-data/.cloginrc并未重写上述内容,我无法获得$ env(HOME)设置正确。

对于一个快速和可能马虎修复我手动设置行66读set密码文件/ home/www-data/.cloginrc,它的工作。