php使用ssh调用bash脚本


php calling bash script with ssh

尝试从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