2014-09-23 3 views
1

Я пытаюсь сделать крюк на BitBucket, который выполняет файл PHP, и этот файл выполняет команду нагрузочный:Git тянуть «доступ запрещен» при использовании shell_exec в PHP

shell_exec('/usr/local/cpanel/3rdparty/bin/git pull'); 

тянущий команда работает штраф на консоли SSH, но PHP возвращает ошибку:

Permission denied (publickey). fatal: Could not read from remote repository.

Please make sure you have the correct access rights and the repository exists.

команда --version показывает путь к мерзавцу прав, whoiami возвращает одного и того же пользователя на обоих, поэтому я не знаю, является ли это проблемой разрешения.

Что может быть не так?

Edit: Дополнительный вопрос: псевдоним я добавил для мерзавца не работают на PHP, только полный путь, как описано выше. Через терминал он работает отлично. Возможно, это та же самая причина, почему ключ не работает в php.

Редактировать 2:$PATH отличается на обоих.

+0

Похоже, что ваш SSH-ключ не был добавлен в этот git-репозиторий (проблема с разрешением). – Alex

+2

Как вы называете этот скрипт shell_exec()? через веб-браузер/http? Разве он не должен возвращать UID веб-сервера в этом случае, а не «тот же пользователь», который у вас есть? –

+0

Открытый ключ находится в репозитории. Я могу вытащить с сервера, проблема только при запуске команды из php-файла. И да, я запускаю php-файл через http, а whoami возвращает одно и то же имя пользователя. Возможно ли иметь пользователя с одинаковым именем, но разные привилегии? –

ответ

2

При выполнении этой команды в PHP скрипт вы запускаете команду не в себе:

shell_exec('/usr/local/cpanel/3rdparty/bin/git pull'); 

Причина, по которой работает от терминала консоли вы запустите команду, как себя с консоли. Но на веб-сервере вы не являетесь пользователем, выполняющим команду. Помните: когда вы запускаете PHP на веб-сервере, это модуль Apache. Значение пользователя веб-сервера, который может быть www-data, root или даже apache на некоторых системах - запускает скрипт PHP, который затем запускает команду shell_exec.

Таким образом, это не сработает, поскольку у вас есть настройка. Возможно, вы можете объединить что-то вместе, что позволило бы использовать пару ключей для веб-сервера для этих целей, но это похоже на риск безопасности, ожидающий своего появления.

+0

Спасибо. Я полный ноб по этому поводу. Я понимаю, что пользователи могут быть разными, но когда я запускаю ** shell_exec ('whoami') **, он говорит, что пользователь такой же, как при запуске с termianl. И когда я перечисляю работающих пользователей, он перечисляет только этого пользователя и говорит, что он работает с apache. Это сбивает с толку. Как я сказал выше, ** $ PATH ** отличается от обоих, может ли это что-то значить? –

+0

@BrunoMuller ** «shell_exec (« whoami »), он говорит, что пользователь такой же, как при запуске с терминала» ** Когда вы запускаете PHP из терминала, вы запускаете себя, как вы вошли в терминал. PHP, который Apache работает как модуль, работает как другой пользователь. Две совершенно разные вещи. Если меня не путают: вы пытаетесь запустить PHP-скрипт из терминала, чтобы сделать это? – JakeGould

Смежные вопросы