ОШИБКА: репозиторий не найден при запуске git pull через shell_exec в php-скрипте

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

origin  [email protected]:sayopaul/autodeploy-tutorial.git (fetch)
origin  [email protected]: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.

person SayoPaul    schedule 25.08.2018    source источник
comment
Работает ли PHP (или веб-сервер) от имени того же пользователя, которого вы используете, когда подключаетесь к серверу по SSH. Если нет, у него может не быть доступа к ключам SSH ваших пользователей для аутентификации по сравнению с GitHub.   -  person Tobias K.    schedule 25.08.2018
comment
Хм большое спасибо. Это имеет смысл . PHP (веб-сервер) работает как пользователь www-data, и пользователь, которого я использую для SSH на сервере, отличается. Однако я ожидаю, что ошибка будет «Отказано в доступе (открытый ключ)», если это проблема с ключом SSH. Пожалуйста, есть ли способ изменить пользователя для PHP-скрипта, чтобы проверить?   -  person SayoPaul    schedule 26.08.2018
comment
Это как бы закодировано в убедитесь, что у вас есть правильные права доступа, но я согласен, ошибку можно было бы сформулировать лучше. Я могу придумать несколько вещей, одна из которых проста — использовать sudo: добавьте это правило: www-data ALL=(yourotheruser) NOPASSWD: /usr/bin/git, затем вызовите git, например: sudo -u yourotheruser git pull   -  person Tobias K.    schedule 26.08.2018
comment
Подход sudo запускает только одну команду от имени другого пользователя (вы можете дополнительно ограничить потенциальный ущерб, разрешив доступ только к пользовательскому скрипту, который запускает git pull в правильном каталоге). Другой подход заключается в изменении пользователя, под которым работает сам процесс PHP, либо с помощью php-fpm, либо с помощью ITK MPM.   -  person Tobias K.    schedule 26.08.2018
comment
Привет !! Оно работает ! Наконец-то у меня получилось, воспользовавшись вашим советом. Вы были правы, у пользователя www-data не было доступа к ключам ssh. Я запустил sudo visudo и добавил правило www-data ALL=(yourotheruser) NOPASSWD: /usr/bin/git, как вы сказали, а затем вызвал git с помощью sudo -u yourotheruser git pull, и теперь он работает успешно. Большое спасибо ! ????????   -  person SayoPaul    schedule 28.08.2018
comment
Здорово. Я добавил решение в качестве ответа :)   -  person Tobias K.    schedule 28.08.2018


Ответы (1)


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 в заданном каталоге, не может быть выполнено.


  • Change the user PHP itself is executed with:
    • Use php-fpm
    • Используйте ITK MPM
person Tobias K.    schedule 28.08.2018
comment
Большое спасибо еще раз! Потратил на это так много времени, и я так рад, что это работает сейчас. ???? - person SayoPaul; 28.08.2018