如何使用PHP exec()在后台执行远程SSH命令?

时间:2011-12-13 10:14:33

标签: php bash ssh

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

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 user@192.168.0.19 '/home/user/script.sh ; exit' 2>&1 >/dev/null </dev/null");

所有PHP变量都已使用escapeshellarg()进行转义,而$remoteCommand是远程计算机上的bash脚本,它会休眠几分钟,然后开始执行某些命令。

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

1 个答案:

答案 0 :(得分:1)

我认为您在命令结尾处缺少&amp; ,无法将执行发送到后台。