我有一个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 origin master,git fetch,git fetch origin master。我已经排除了许可问题和特权等所有可能性。
这个sh文件是通过点击PHP页面来执行的,PHP页面看起来像这样
<?php
$output = shell_exec('/bin/sh /var/www/html/TDS/git.sh');
print_r("<pre>$output</pre>");
?>
非常简单,它可以减去Pull请求。任何帮助都会令人惊叹,我已经非常接近这个了。
答案 0 :(得分:2)
要使git pull
起作用,运行它的用户必须具有git repo索引的写权限(在.git/
下)。确保运行脚本的用户(Apache?)具有这些权限。
答案 1 :(得分:1)
... PHP(www-data)有权限吗?它是文件的所有者吗?
答案 2 :(得分:0)
这是原始存储库的ssh URL吗?手动执行时是否运行ssh-agent?你有没有提供ssh代理访问shell脚本的提示(提示,答案是肯定的,是的,不是。否则可能。)
所以我们确定ssh访问是问题所在。然后,您有两个选择:将ssh-agent凭据添加到php进程中,并允许php脚本访问ssh凭据而无需密码。两者都有问题。
要将assh-agent凭据导入php进程,请将$ SSH_AUTH_SOCK环境变量从shell复制到php / shell脚本SSH_AUTH_SOCK=/tmp/ssh-wScioBA10361/agent.10361 git pull
。然后假设php脚本有足够的权限访问该文件,git pull将起作用。这是有问题的,因为您需要ssh进入系统以获取auth sock,更改程序以使用新套接字(或编写程序以查找当前套接字),并使所有内容保持运行。注销,重启等,你将失去git pull功能。
另一个选项是为运行git pull
的php / shell用户创建ssh凭据。找到该用户的主目录,create .ssh和ssh-keygen新密钥。您可以将私钥设置为没有密码,以便任何可以访问此文件(安全风险!!)的人都可以使用这些凭据进行ssh。将公钥添加到有权访问git repo的帐户的授权密钥中(gitolite允许您限制帐户可能拥有的权限)。