Github крюк сценарий Баш не тянет - PullRequest
1 голос
/ 21 мая 2011

У меня есть учетная запись github, настроенная на мой сервер EC2 без проблем.Когда я пытаюсь запустить скрипт bash для «git pull», он этого не делает.Я сделаю «git status» и многие другие команды.Вот мой файл sh

cd /var/www/html/TDS/;
ls -la;
type git;

git status;
git remote -v;

git pull origin master;

echo "hello world";

Все строки работают, кроме git pull.Я пробовал git pull, мастер происхождения git pull, git fetch, мастер происхождения git fetch.Я исключил все возможности, такие как проблемы с разрешениями и привилегиями.

Этот sh-файл выполняется при нажатии на страницу PHP, страница PHP выглядит следующим образом

<code><?php
$output = shell_exec('/bin/sh /var/www/html/TDS/git.sh');
print_r("<pre>$output
");?>

Очень просто и работает без запроса Pull. Любая помощь была бы удивительной, я так близок к тому, чтобы заставить это работать.

Ответы [ 3 ]

2 голосов
/ 21 мая 2011

Чтобы git pull работал, пользователь, выполняющий его, должен иметь права на запись в индекс git-репо (ниже .git/).Убедитесь, что пользователь, под которым запускается скрипт (Apache?), Имеет эти права.

1 голос
/ 21 мая 2011

... есть ли у PHP (www-data) разрешения?Это владелец файла?

0 голосов
/ 21 мая 2011

Это ssh-URL для исходного хранилища?У вас работает ssh-agent, когда вы делаете это вручную?Предоставили ли вы ssh агенту доступ к сценарию оболочки (подсказка, ответы да, да, нет. Возможно.)

Итак, мы определили, что проблема заключается в ssh-доступе.Затем у вас есть два варианта: получить учетные данные ssh-agent в процессе php и разрешить скрипту php доступ к учетным данным ssh без пароля.И то и другое проблематично, так или иначе.

Чтобы получить учетные данные assh-agent в процесс php, скопируйте переменную окружения $ SSH_AUTH_SOCK из оболочки в скрипт php / shell SSH_AUTH_SOCK=/tmp/ssh-wScioBA10361/agent.10361 git pull.Затем, если у php-скрипта достаточно привилегий для доступа к этому файлу, будет работать git pull.Это проблематично, потому что вам нужно войти в систему через ssh, чтобы получить носок авторизации, изменить программу на использование нового сокета (или написать программу для поиска текущего сокета) и оставить все работающим.Выйдите из системы, перезагрузитесь и т. Д., И вы потеряете функциональность git pull.

Другой вариант - создать учетные данные ssh для пользователя php / shell, который запускает git pull.Найдите домашний каталог, создайте новые ключи .ssh и ssh-keygen для этого пользователя.Вы можете настроить закрытый ключ так, чтобы он не имел пароля, чтобы любой, кто может получить доступ к этому файлу (угроза безопасности !!), мог ssh использовать эти учетные данные.Добавьте открытый ключ к авторизованным ключам учетной записи, имеющей доступ к git-репо (gitolite позволит вам ограничить права, которые может иметь эта учетная запись).

...