Существует ли простой способ выполнения команд SSH в фоновом режиме на удаленных машинах из PHP без использования 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 на удаленной машинеон спит в течение нескольких минут, а затем начинает выполнять некоторые команды.
Моя проблема в том, что если я выполню эту команду SSH из bash, она немедленно возвращает управление bash.Если я выполняю его с php, используя exec()
, он ждет, пока не выполнится удаленная команда.Я попытался добавить 2>&1 >/dev/null </dev/null
после /home/user/script.sh
, но выполнение все еще не возвращает управление сценарию PHP.