1

я сделал это

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

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

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

1 ответ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');
    

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .