PHP运行git了“SSH权限被拒绝”(php run git got “ssh Permissio

2019-09-22 07:38发布

我试图从浏览器中的PHP脚本运行git拉,但我得到了“SH:连接到主机git.assembla.com端口22:权限被拒绝”

我的PHP脚本

<?php
$output=array();
$returnVar=0;
chdir("/var/www/html");
exec('git pull git@git.assembla.com:andrewadel.git master 2>&1', $output , $returnVar);
// exec('pwd', $output , $returnVar);
echo "<pre>\n";
echo "return status: $returnVar\n\n";
print_r($output);
echo "</pre>\n";

当我手动运行该脚本作为“阿帕奇”,一切都很好

bash-4.1$ whoami
apache
bash-4.1$ php gitsync.php
<pre>
return status: 0

Array
(
    [0] => From git.assembla.com:andrewadel
    [1] =>  * branch            master     -> FETCH_HEAD
    [2] => Already up-to-date.
)
</pre>

当我从浏览器中运行它,它失败

http://103.7.164.33/gitsync.php?111

return status: 1

Array
(
    [0] => ssh: connect to host git.assembla.com port 22: Permission denied
    [1] => fatal: The remote end hung up unexpectedly
)

谢谢

Answer 1:

很多人在这里变量...但我面对的是一个远程CGI脚本我工作几乎完全一样的行为。

在我的情况下,问题涉及到了SELinux在CentOS。

user@remoteserver:~$ getsebool -a | grep httpd

结果显示:

...
httpd_can_network_connect --> off
...

测试可能的修复(须藤或以root身份运行):

user@remoteserver:~$ setsebool httpd_can_network_connect=1
//...then initiate your serverside script remotely

永久性修复(如果上述证明是有效的):

user@remoteserver:~$ setsebool -P httpd_can_network_connect=1

-P选项确保受试者中的SELinux值被设置为指定值作为默认在将来重新引导。 请参阅: man getseboolman setsebool



Answer 2:

是您的网络服务器和PHP安装通过了Suhosin,安全模式,AppArmor的或其他安全机制执行呢?

我建议您尝试PHP-的Git绑定像PHP的混帐如果你正在做更多的操作。 该模块是专为PHP代码中使用Git工作。



Answer 3:

阿帕奇将作为“人”的用户运行该脚本。 您的脚本依赖于拥有的私有密钥最有可能保存在〜阿帕奇/的.ssh / id_rsa

失败是git的不能访问密钥,不能对自己的git的服务器进行身份验证。

解决的办法是指定正确的键使用,使该密钥访问正在执行脚本的用户。

阅读本关于如何指定密钥:

指定的私人SSH密钥执行带或不带红宝石shell命令时使用?

看看这里的方法来运行为不同的用户:

https://serverfault.com/questions/226374/how-to-run-php-files-as-another-user-with-apache-and-fastcgi

我不会推荐运行的人(因为那么nobody用户访问你的私钥),或作为阿帕奇(从那以后你都在增加可以做应该的漏洞为您的网站中发现的损坏)。 因此,你应该创建一个具有最小权限的不同的用户阅读你的私钥和执行git的命令。 它可能没有必要指定键,如果你只是为此创建受限用户帐户,并把密钥(公钥/私钥)到的〜/ .ssh



Answer 4:

这是一个权限问题? 一个PHP脚本将作为nobody用户最有可能的,这可能没有权限运行的git命令运行。



文章来源: php run git got “ssh Permission denied”