Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
php运行git-get";ssh权限被拒绝";_Php_Git_Ssh_Assembla - Fatal编程技术网

php运行git-get";ssh权限被拒绝";

php运行git-get";ssh权限被拒绝";,php,git,ssh,assembla,Php,Git,Ssh,Assembla,我试图从浏览器中运行一个php脚本,但是我得到了 “sh:连接到主机git.assemblea.com端口22:权限被拒绝” 我的php脚本: 谢谢这是权限问题吗?PHP脚本很可能以nobody用户的身份运行,而nobody用户可能没有运行git命令的权限。您的Web服务器和PHP安装是否由Suhosin、安全模式、Apparmor或其他安全机制强制执行 我建议您尝试使用PHP Git绑定,比如执行更多操作。该模块设计用于在PHP代码中使用Git。Apache将以“nobody”用户的身份运行脚

我试图从浏览器中运行一个php脚本,但是我得到了 “sh:连接到主机git.assemblea.com端口22:权限被拒绝”

我的php脚本
谢谢这是权限问题吗?PHP脚本很可能以nobody用户的身份运行,而nobody用户可能没有运行git命令的权限。

您的Web服务器和PHP安装是否由Suhosin、安全模式、Apparmor或其他安全机制强制执行


我建议您尝试使用PHP Git绑定,比如执行更多操作。该模块设计用于在PHP代码中使用Git。

Apache将以“nobody”用户的身份运行脚本。您的脚本依赖于私钥最有可能存储在~apache/.ssh/id\u rsa

失败的原因是git无法访问该密钥,并且无法对git服务器进行身份验证

解决方案是指定要使用的正确密钥,并使执行脚本的用户可以访问该密钥

请阅读以下内容,了解如何指定密钥:

在此处查看以不同用户身份运行的方法:


我不建议以nobody(因为nobody用户可以访问您的私钥)或apache(因为如果发现您的站点存在漏洞,您将增加可能造成的损害)的身份运行。因此,您应该创建一个具有最低权限的不同用户来读取您的私钥并执行git命令。如果您只是为此创建了一个有限的用户帐户,并将密钥(public/private)放入~/.ssh中,则可能不需要指定密钥这里有很多变量。。。但我在编写一个远程cgi脚本时遇到了几乎完全相同的行为

就我而言,这个问题与CentOS上的SELinux有关

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

显示:

测试可能的修复程序(sudo或以root用户身份运行):

永久性修复(如果以上证明有效):

user@remoteserver:~$setsebool-P httpd\u can\u network\u connect=1

-p选项确保在将来重新启动时将subject SELinux布尔值设置为默认值。 见:
man getsebool

man-setsebool

对不起,我如何检查php作为哪个用户运行?这取决于php脚本的执行方式。如果脚本正在运行,您可以执行
ps aux | grep scriptName.php
。或者只执行$var=exec(“env”、$output,&returnvar),我认为这不是根本原因,因为错误在于ssh在打开连接时拒绝了权限。该错误与身份验证失败无关。因此,我认为这是PHP的另一个许可问题或安全机制——见我的答案。我认为这是事实。我被这个错误与ssh连接拒绝错误的相似性吓坏了,但看起来存在某种沙箱来防止被利用的脚本进行外部连接。据猜测,关键的事情将是第二件出错的事情git@assembla.com2>&1',$output,$returnVar);--------------------------返回状态:255数组([0]=>OpenSSH_5.3p1,OpenSSL 1.0.0-fips 2010年3月29日[1]=>将不分配伪终端,因为stdin不是终端。[2]=>debug1:读取配置数据/etc/ssh/ssh_config[3]=>debug1:应用*[4]=>debug1:连接到assembla.com[64.250.188.41]端口22。[5]=>debug1:连接到地址64.250.188.41端口22:权限被拒绝[6]=>ssh:连接到主机assembla.com端口22:权限被拒绝)
<?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
)
...
httpd_can_network_connect --> off
...
user@remoteserver:~$ setsebool httpd_can_network_connect=1
//...then initiate your serverside script remotely