Я пытаюсь подключиться к bitbucket, который выполняет файл php, и этот файл выполняет команду pull:
shell_exec('/usr/local/cpanel/3rdparty/bin/git pull');
Команда pull отлично работает на консоли SSH, но PHP возвращает ошибку:
В доступе отказано (publickey). неустранимый: не может читать с пульта
репозиторий.Пожалуйста, убедитесь, что у вас есть правильные права доступа и хранилище
существует.
Команда —версия показывает путь к мерзавцу, whoiami возвращает одного и того же пользователя на обоих, так что я не знаю, если это проблема с разрешениями.
Что может пойти не так?
Редактировать: Дополнительная проблема: псевдоним, который я добавил для мерзавец не работает на PHP, только полный путь, как указано выше. Через терминал работает просто отлично. Возможно, это та же самая причина, по которой ключ не работает в php.
Изменить 2: $PATH
отличается на обоих.
Когда вы запускаете эту команду в скрипте PHP, вы не запускаете команду как вы:
shell_exec('/usr/local/cpanel/3rdparty/bin/git pull');
Причина, по которой он работает с консоли терминала, заключается в том, что вы запускаете команду как вы сами из консоли. Но на веб-сервере вы не являетесь пользователем, выполняющим команду. Помните: когда вы запускаете PHP на веб-сервере, это модуль Apache. Имеется в виду пользователь веб-сервера, который может быть www-data
, root
или даже apache
в некоторых системах — работает скрипт PHP, который затем запускает shell_exec
команда.
Таким образом, это никогда не будет работать, как у вас есть настройки. Возможно, вы можете объединить что-то вместе, что позволит веб-серверу использовать пару ключей для этих целей, но это похоже на угрозу безопасности, ожидающую своего появления.
Других решений пока нет …