ОШИБКА: хранилище не найдено при запуске git pull через shell_exec в сценарии php - PullRequest
0 голосов
/ 25 августа 2018

Я правильно настроил ssh-ключи и добавил их в свою учетную запись на github. Всякий раз, когда я захожу на сервер и запускаю git pull, все работает нормально, а изменения извлекаются из хранилища. Однако у меня есть сценарий развертывания, который запускает git pull через shell_exec (), но возвращает эту ошибку;

origin  git@github.com:sayopaul/autodeploy-tutorial.git (fetch)
origin  git@github.com:sayopaul/autodeploy-tutorial.git (push)
ERROR: Repository not found.
fatal: Could not read from remote repository.

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

1 Ответ

0 голосов
/ 28 августа 2018

PHP (веб-сервер), скорее всего, не работает под тем же пользователем , который вы используете при подключении SSH к серверу. Таким образом, он не имеет доступа / разрешения / не использует правильные ключи SSH для аутентификации против GitHub.

Я могу придумать 2 простых решения:


  • Использовать sudo:

Добавьте это правило в sudo-conf (sudo visudo), чтобы пользователь www-data мог запускать (только) /usr/bin/git как yourotheruser:

www-data ALL=(yourotheruser) NOPASSWD: /usr/bin/git

Теперь вы можете вызывать git, используя:

sudo -u yourotheruser git pull

Совет безопасности: Чтобы ограничить потенциальный ущерб, если кому-то удастся выполнить произвольный код с помощью www-data:

Создайте скрипт, принадлежащий yourotheruser (и недоступный для записи другим), например, /home/yourotheruser/deploy.sh с содержанием:

cd /path/to/repo
git pull

И разрешить sudo доступ только к этому сценарию. Таким образом, никакие другие действия git, кроме pull в указанном каталоге, не могут быть выполнены.


  • Изменение Сам пользователь PHP выполняется с:
    • Использование php-fpm
    • Используйте ITK MPM
...