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');
    
Другие вопросы по тегам