从 php 脚本运行 git pull

AFR*_*FRC 5 php permissions ssh git apache-2.2

我正在尝试使用 Git、GitHub 和 SSHPerfect Workflow,但似乎无法运行git pull. 我试过了git status,没问题。

git pull 2>&1我得到:

错误:无法打开 .git/FETCH_HEAD:权限被拒绝

我试图 chmod .git dir 到 777 没有运气。

当我whoami从浏览器运行时,它向我显示:apache

- - 编辑 - -

我刚刚做了chown apache:apache -R .git,现在我得到:

无法创建目录“/.ssh”。主机密钥验证失败。致命:远端意外挂断

Jef*_*and 6

无法创建目录“/.ssh”。主机密钥验证失败。致命:远端意外挂断

阅读并考虑您的错误消息。主机密钥存储在 ~/.ssh/known_hosts 文件中。您的 Apache 用户将“/”作为其主目录,它绝对没有也不应该对根目录具有写访问权限。

我建议您为此创建一个用户帐户......也许gitpull-user或什么。确保它有一个可用的主目录,即使它位于非典型的地方。以该用户身份登录并创建一个 shell 脚本来完成您作为该用户尝试执行的操作。当然,您还必须将适当的 id_rsa 密钥复制到用户的帐户等。

通过将此行添加到 /etc/sudoers 来配置 sudo 以启动该脚本

apache ALL = (gitpull-user) NOPASSWD: /path/to/script.sh`
Run Code Online (Sandbox Code Playgroud)

并且如果您遇到“无 TTY”问题:

Defaults:apache !requiretty
Run Code Online (Sandbox Code Playgroud)

更改您的 PHP 脚本以调用 sudo -u gitpull-user ./script.sh


可以将 Apache 的主目录更改为“真实”位置,然后将密钥放在那里,但这会带来风险,即您的数据必须由 apache 拥有,并且如果守护进程受到威胁,则可以读取密钥. 建立第二个用户提供了一定程度的隔离。