Git通过PHP &SSH:拒绝apache用户的SSH认证


Git via PHP & SSH: ssh authentification of user apache denied

我有以下设置:CentOS 6.5, git(客户端),apache 2.2,运行测试站点等。目标是创建一个远程浏览器级访问来执行"git pull"。有一种通用的方法可以使用PHP实现这样的事情。假设我有两个脚本,一个是php(它被调用直接通过浏览器执行),另一个是shell脚本-分别是gitpull.php和gitpull.sh。

gitpull.php(与index.php在同一个文件夹中)目录:

<?php
$message=shell_exec("/var/www/html/...PATH-TO-INDEX.PHP.../gitpull.sh 2>&1");
?>

gitpull.sh内容:

cd /var/www/html/...PATH-TO-FOLDER-WHERE-.GIT-WAS-INITIALIZED
git pull origin master:master

据我所知,通过调用php脚本,以下所有操作都将作为"apache"用户执行,因此我通过sudo -u apache ssh-keygen -t rsa创建了rsa密钥。两个密钥都在~/.ssh目录中(apache设置为访问它们),以及/var/www中的副本(默认情况下apache主文件夹,我这样做是为了避免混淆,以防apache只从那里使用密钥)。我假设密钥的位置并不重要,只要它们使用"ssh-add"在sss中注册。Apache具有访问所有相关文件/文件夹的权限。

我认为我的问题不是在脚本,所以我决定检查:

# ssh -T git@bitbucket.org

(工作很好,键被接受),然后

# sudo -u apache ssh -T git@bitbucket.org

返回
Permission denied (publickey).

问题:我在设置中错过了什么?为什么apache不能通过ssh密钥识别?如果我在工作目录中弄错了,那么密钥必须在哪里才能使apache与ssh一起使用它们?它能帮助以某种定制的方式编写ssh访问脚本吗?

您是否在bitbucket帐户中添加了ssh公钥?

为了调试这个问题,我运行:sudo -u www-data php git.php

这个答案通过展示如何调试来提供帮助!https://stackoverflow.com/a/13097666/2614353