我有以下设置: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