PHP shell_exec ssh-add ssh-agent не удалось открыть соединение с агентом аутентификации
Я сделал это
shell_exec('eval "$(ssh-agent -s)" 2>&1');
shell_exec('ssh-add /opt/.ssh/id_rsa 2>&1');
и по-прежнему получаю сообщение об ошибке подключения к агенту аутентификации. Первая строка успешно выводит идентификатор агента.
Есть идеи, почему и как решить эту проблему?
1 ответ
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');