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');