有没有一种简单的方法可以在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脚本。
答案 0 :(得分:1)
我认为您在命令结尾处缺少&amp; ,无法将执行发送到后台。