我创建了一个简单的 PHP 站点,我们想用它来禁用/启用 cisco 交换机上的端口。我通过 php 函数 exec() 将两个参数(端口和操作)传递给 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
如果我以 apache 用户身份手动执行 bash 脚本(甚至直接执行 clogin 命令),一切都会按预期工作,端口会被禁用。但是一旦我通过 PHP 函数调用它,我就会得到输出:
数组([0] => 没有这样的变量 [1] =>(读取“env(HOME)”上的跟踪)[2] => 从 [3] 内部调用 =>“设置密码文件 $env(HOME)/.cloginrc " [4] => (文件 "/usr/libexec/rancid/clogin" 第 66 行)
什么都做不成。这表明密码输入有问题(据我所知)。这个文件的权限是正确的,我猜他们必须这样做,否则它不能直接在 shell 内工作。甚至尝试使用 -f 开关更改 .cloginrc 路径,但没有成功。PHP 安全模式:关闭显示错误:打开
该脚本需要一段时间,因为需要打开 telnet 连接。这就是为什么我把它放到一个单独的 bash 脚本中。