1.创建一个网址可以访问的php
(例如:http://www.baidu.com/php.php)
问题
//这种看着没问题,但是不好使 system('cd /opt/www/chat && git pull');
办法
<?php //执行命令:cd到目标文件,git pull system('cd /opt/www/chat && git pull 2>&1');
2.查看执行用户
问题
执行上述文件后会一直提示你密钥验证失败,事实上你在命令行执行一点问题没有
原因
你在命令行中运行的是在root用户下, 但是执行php文件的时候是哪个用户在执行?
php
<?php exec("cd ~ && cd - && cd -", $output);//跳到用户目录,再回刚刚的目录,然后跳到用户目录 print_r($output);//输出(实际上输出的是你的php文件目录和运行PHP脚本的用户根目录)
php运行结果分析
正常情况下应该输出类似/root或者/home/git这种看的懂得用户 但是实际上我的输出是/var/lib/php/fpm what? php的执行目录是哪个用户呢? 我们查看passwd并没有发现疑似用户。。。 (经过猜测,我肯定他是php-fpm用户,别问我怎么猜到的)
3.模拟浏览器
知道用户后就简单了 我们直接进入该用户就好 su php-fpm (注:会报一个无法进入该用户的错,百度一下修改权限) cd ~ ls -ah
4.创建SSH Key(在php-fpm用户下)
这里就不多说了
更新项目后再次执行git pull(在php-fpm用户下)
又报错。。。 别担心,看看又是权限的问题 直接暴力777(将你的项目文件权限改为777) 执行,成功!!!
5.最后
添加你的php文件链接(例如:http://www.baidu.com/php.php) 到推送事件中(例如:gitlab后台的setting->Integrations)