Функция shell_exec()
запускает ваши команды в оболочке, и после их завершения оболочка также завершается (поэтому также будут потеряны все переменные окружения).
Со вторым вызовом новая оболочка вызывается без переменных окружения, указывающих на работающий ssh-agent
и поэтому неудивительно, что он терпит неудачу.
Существуют различные способы решения этой проблемы:
Самый простой - запустить обе команды в одной оболочке:
shell_exec('eval "$(ssh-agent -s)" 2>&1 && ssh-add /opt/.ssh/id_rsa 2>&1');
Другой - проанализировать переменные окружения непосредственно в PHP, установить их в среду вашего скрипта, чтобы они передавались в следующую оболочку (надеюсь).
Последний делает что-то похожее на предыдущий, но передает среду как часть следующего shell_exec()
, потому что в первой строке вам не нужно это eval
, но оно важно во второй:
$str = shell_exec('$(ssh-agent -s)');
shell_exec('eval "' . $str . '"; ssh-add /opt/.ssh/id_rsa 2>&1');