2011-12-13 281 views
0

有没有一种简单的方法可以在不使用ssh2_*的情况下在PHP远程机器的后台执行SSH命令? PHP脚本由用户从bash执行(不涉及Apache),所以它不是权利问题。我试着这样做:如何使用PHP exec()在后台执行远程SSH命令?

exec("ssh -f -o UnknownHostsFile=/dev/null -o StrictHostKeyChecking=no -i {$keyFile} {$user}@{$ip} {$remoteCommand} 2>&1 >/dev/null </dev/null"); 

例如:

exec("ssh -f -o UnknownHostsFile=/dev/null -o StrictHostKeyChecking=no -i /home/data/id_rsa [email protected] '/home/user/script.sh ; exit' 2>&1 >/dev/null </dev/null"); 

所有PHP变量已经逃脱了escapeshellarg()$remoteCommand是远程机器上的bash脚本,睡了几分钟,然后开始执行一些命令。

我的问题是,如果我从bash执行该SSH命令,它会立即控制回bash。如果我使用exec()从php执行它,它会等待直到执行远程命令。我试过在/home/user/script.sh后面添加2>&1 >/dev/null </dev/null,但是执行仍然没有将控制权返回给PHP脚本。

+0

我不明白bash的问题。你不想让它立即控制回bash吗?你不是想在后台执行吗? – davidethell

+0

如果你不介意阐述,为什么你不想使用ssh2_ *? – favoretti

+0

@davidethell是的,我这样做,但似乎并不奏效。 –

回答

1

我想你是缺少一个&在您的命令的结尾发送执行到后台。

+0

是的,我错过了,但它仍然没有帮助。 –