2016-04-14 130 views
1

尝试从php执行bash脚本(使用ssh命令),但不能像在CLI上执行的方式那样工作。使用ssh调用bash脚本

这里是bash脚本的片断(deploy_to_nagios.sh):在CLI

#!/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" 

运行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相同,把这两个命令当作一个对待?

+0

澄清:deploy_to_nagios.sh或/usr/local/nagios/health_check_${CARRIER}.cfg无法找到? –

+0

不知道你在说哪个文件无法找到,但如果你担心这个问题,那为什么不直接使用文件的完整路径呢? – drewyupdrew

+0

通过php执行deploy_to_nagios.sh时,找不到“/usr/local/nagios/health_check_${CARRIER}.cfg”。但是通过CLI执行deploy_to_nagios.sh时可以找到该文件。我猜想,PHP正在执行“ls /usr/local/nagios/health_check_${CARRIER}.cfg”作为单独的命令命令ssh -q $ {MANAGEMENT_NAGIOS_SERVER $ {MANAGEMENT_NAGIOS_USER},因此它可能会在本地服务器上查看它在$ {MANAGEMENT_NAGIOS_USER}上? – user4298197

回答

0

该项目将允许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