尝试从php执行bash脚本(里面有ssh命令),但不能像在CLI上执行那样工作。
以下是bash脚本(deploy_to_nagios.sh
)的片段:
#!/bin/bash -x
SERVER=$1
CARRIER=$2
MANAGEMENT_NAGIOS_SERVER=$3
MANAGEMENT_NAGIOS_USER=$4
ssh -q ${MANAGEMENT_NAGIOS_USER}@${MANAGEMENT_NAGIOS_SERVER} "ls /usr/local/nagios/health_check_${CARRIER}.cfg"
在CLI中运行deploy_to_nagios.sh会成功返回,但当使用在php上执行时
$exec3 = shell_exec('deploy_to_nagios.sh '.' '.$server.' '.$carrier.' '.$nag_manage_server.' '.$nag_manage_user);
找不到该文件。我的猜测是php正在分别运行ssh和ls命令,这就是为什么找不到文件的原因。有没有一种方法可以让php执行与CLI上的行为相同,将这两个命令视为一个命令?
这个项目将允许PHP通过ssh获得真正的Bash-shell并与之交互。在这里获取:https://github.com/merlinthemagic/MTS
然后触发bash脚本或直接执行命令。直接让您处理返回,而不是在bash中构建异常逻辑。
下载后,您只需使用以下代码:
//get a remote bash shell on server: MANAGEMENT_NAGIOS_SERVER
$shell = 'MTS'Factories::getDevices()->getRemoteHost(MANAGEMENT_NAGIOS_SERVER)->getShellBySsh(MANAGEMENT_NAGIOS_USER, 'secretPassword');
//execute the ls command (--color=none to avoid special chars from terminal colors)
$return1 = $shell->exeCmd('ls --color=none /usr/local/nagios/health_check_${CARRIER}.cfg');
echo $return1; //ls return