php run git got “ssh Permission denied”
我试图从浏览器运行git pull-in-php脚本,但是"sh:连接到主机git.assembly.com端口22:权限被拒绝"
我的PHP脚本:1 2 3 4 5 6 7 8 9 10 11 12 13 | <?php $output=array(); $returnVar=0; chdir("/var/www/html"); exec('git pull [email protected]:andrewadel.git master 2>&1', $output , $returnVar); // exec('pwd', $output , $returnVar); echo"[cc lang="php"] "; echo"return status: $returnVar "; print_r($output); echo" |
’;< /代码> 当我手动运行脚本为"apache"时,一切都很好
1 2 3 4 5 6 7 8 9 10 11 12 |
< /代码> 当我从浏览器运行它时,它失败了
1 2 3 4 5 6 7 8 9 |
谢谢
这里有很多变量…但是我在使用一个我正在开发的远程CGI脚本时遇到了几乎完全相同的行为。
在我的案例中,这个问题与Centos上的Selinux有关。
显示:
1 2 3 | ... httpd_can_network_connect --> off ... |
测试可能的修复(sudo或以根目录运行):
1 2 | user@remoteserver:~$ setsebool httpd_can_network_connect=1 //...then initiate your serverside script remotely |
永久性修复(如果以上证明有效):
-p选项确保主题selinux布尔值在以后重新启动时设置为默认值。见:
Apache将以"无人"用户的身份运行脚本。您的脚本依赖于将私钥最有可能存储在~apache/.ssh/id_rsa。
失败是Git无法访问该密钥,并且无法通过Git服务器进行身份验证。
解决方案是指定要使用的正确密钥,并使执行脚本的用户可以访问该密钥。
阅读此内容了解如何指定密钥:
指定在执行带Ruby或不带Ruby的shell命令时要使用的专用ssh密钥?
请在此处查看以不同用户身份运行的方法:
https://serverfault.com/questions/226374/how-to-run-php-files-as-another-user-with-apache-and-fastcgi
我不建议以无人身份运行(从那时起,无人用户可以访问您的私钥),也不建议以Apache身份运行(从那时起,如果发现您的站点存在漏洞,您将增加可能造成的损害)。因此,您应该创建一个具有最小权限的不同用户来读取您的私钥并执行git命令。如果只是为此创建一个有限的用户帐户并将密钥(public/private)放入~/.ssh,则可能不需要指定密钥。
您的Web服务器和PHP安装是否由suhosin、安全模式、apparmor或其他安全机制强制执行?
如果您要做更多的操作,我建议您尝试php-git绑定,比如php-git。该模块是为使用PHP代码中的Git而设计的。
这是权限问题吗?PHP脚本很可能以nobody用户的身份运行,而nobody用户可能没有运行git命令的权限。