包含clogin的Bash脚本在通过php执行时无效

时间:2012-12-03 08:43:41

标签: php bash

我创建了一个简单的PHP站点,我们想用它来禁用/启用cisco开关上的端口。 我通过php函数exec()将两个参数(port和action)传递给bash脚本。为了调试,我在bash脚本的末尾设置了这些参数。

我调用的php函数的重要部分如下所示:

function PortAction($port, $action){
    echo "<hr /> Port:".$port."<br />Action:".$action;
    chdir('/usr/local/icinga-1.7.0/videowand/');
    echo exec('sh /usr/local/icinga-1.7.0/videowand/action2.sh 2>&1',$output, $return);
    echo "Return / Output: ".$return;
    print_r($output);    
}

bash脚本“action2.sh”:

#!/bin/bash
/usr/libexec/rancid/clogin -c "conf t; int Fa0/1; shutdown" 192.168.6.6

如果我手动执行bash脚本(甚至直接执行clogin命令)作为apache用户,它会按预期工作,端口被禁用。 但是只要我通过PHP函数调用它,我就得到输出:

  

数组([0] =&gt;没有这样的变量[1] =&gt;(读取跟踪“env(HOME)”)[2] =&gt;从[3] =&gt;中调用“set password_file $ env(HOME)/。cloginrc“[4] =&gt;(文件”/ usr / libexec / rancid / clogin“第66行)

没有任何事情可做。 这表明密码输入存在一些问题(据我所知)。 这个文件的权限是正确的,我猜他们不得不直接在shell中工作。 甚至尝试使用-f开关更改.cloginrc路径,但没有成功。 PHP安全模式:关闭 显示错误:开启

脚本需要一段时间,因为需要打开telnet连接。这就是我把它放到一个单独的bash脚本中的原因。

1 个答案:

答案 0 :(得分:1)

提供sh二进制文件的完整路径,如下所示:

echo exec('/bin/sh /usr/local/icinga-1.7.0/videowand/action2.sh 2>&1',$output, $return);

我假设上面有/bin/sh,因为这通常是sh的标准路径,但请确保使用
which sh命令。

/bin/sh是指向您的shell的软链接,通常为/bin/bash,我不确定exec()是否可以使用二进制文件的软链接,所以如果上面不起作用然后只使用/bin/bash代替/bin/sh