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


How to execute remote SSH command in background using PHP exec()?

有没有一种简单的方法可以在不使用ssh2_*的情况下在 PHP 的远程机器上后台执行 SSH 命令?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。如果我使用 php 执行它exec()它会等到远程命令执行。我尝试在/home/user/script.sh后添加2>&1 >/dev/null </dev/null,但执行仍然没有将控制权返回给 PHP 脚本。

我认为您在将执行发送到后台的命令末尾缺少一个 &