PHP shell_exec ssh-add ssh-agent не удалось открыть соединение с агентом аутентификации

664
user3226932

я сделал это

shell_exec('eval "$(ssh-agent -s)" 2>&1'); shell_exec('ssh-add /opt/.ssh/id_rsa 2>&1'); 

и все еще получая ошибку, соединяющуюся с агентом аутентификации. Первая строка успешно выводит идентификатор агента.

Есть идеи, почему и как решить эту проблему?

1

1 ответ на вопрос

1
Jakuje

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

Похожие вопросы