
/t/455439 昨天发了帖子,coding 无法装钩子,所以就自己随便搞个试试,但发现通过 shell_exec,cd ls mdir 都可以运行,但 git pull 就是不行,我 git 已经公钥装好了 ,把命令在 linux 内直接可以运行,通过 web 却失败。
后来试了网上的很多方法,免密码什么的,还是不行,有什好的方式吗?
1 liuzhaowei55 2018-05-17 10:58:15 +08:00 via iPhone 看一下运行 php 的用户是哪个,是不是你放私钥的那个用户。 |
2 sytnishizuiai OP @liuzhaowei55 都是 root |
3 KomeijiSatori 2018-05-17 11:04:23 +08:00 报错了么 |
4 hteen 2018-05-17 11:12:02 +08:00 做钩子大多是走 ssh 协议, coding 里配置部署公钥 之前用 docker 写钩子, 也是 ssh 权限的问题 后来找了个包操作 Git, 挺方便的 composer require cpliakas/git-wrapper |
5 sytnishizuiai OP @KomeijiSatori 没报错,200 通过的 |
6 sytnishizuiai OP @hteen 嗯 我已经走 ssh 了,公钥也配置好了,服务器里面可以直接 git 了,运行语句 linux 里面直接 php 运行没问题的,就是 web 内运行没效果。 谢谢,我去试试。这功能其实好了也不准备上线,手动更新安全点,就是昨天搞了我一晚上,就是 git 过不了。。。 |
7 KomeijiSatori 2018-05-17 11:54:29 +08:00 @sytnishizuiai shell_exec("git xxxxx >> /tmp/git.log") 执行一次然后进 /tmp 看看 |
8 widdy 2018-05-17 12:46:23 +08:00 上面不都提过了,很显然是你 web 运行 php 的用户不对吧,www-data 和 root。你 ps 看一下,php 到底是哪个用户运行的。 |
9 haoliang 2018-05-17 12:48:39 +08:00 之前用 shell_exec, exec, system ... 也是碰到莫名其妙的问题,图省心后来就一直用 symfony/process |
10 sytnishizuiai OP |
11 nosay 2018-05-17 13:34:17 +08:00 很明显,你在 linux 中运行 php 的用户,和 WebHooks 触发时,运行 php 的用户是两个用户 sudo mkdir -p /home/www/.ssh sudo chown -R www.www /home/www/.ssh sudo -Hu www ssh-keygen -t rsa 然后把生成的公钥部署上去,再试一下 |
12 jfcherng 2018-05-17 13:34:18 +08:00 www 的公钥和 root 的公钥是不同的,如果 PHP 是以 www 用户运行,那 shell_exec 里的 git 用的就是 www 的公钥 |
13 wangzhi 2018-05-17 13:40:22 +08:00 权限不行 |
14 kttde 2018-05-17 13:42:36 +08:00 shell_exec 要带上用户名 sudo -Hu root git pull 或者 sudo -Hu www git pull |
15 defunct9 2018-05-17 16:59:04 +08:00 开 ssh,让我上去试试 |
16 vex2 2018-05-17 17:04:35 +08:00 试试 export GIT_SSH=/path/to/key |
17 0x8C 2018-05-17 17:14:41 +08:00 echo shell_exec("whoami") |
18 PHPJit 2018-05-17 17:17:52 +08:00 用 workerman 或者 swoole 吧,然后 pull 一下。 |
19 Sanko 2018-05-17 17:20:57 +08:00 via Android 路径问题吧 |
20 naiba 2018-05-17 17:30:49 +08:00 via Android 自动部署吗 试试 github.com/naiba/nocd 吧 |
21 msg7086 2018-05-18 00:58:29 +08:00 从第二楼开始就在瞎扯了。www 权限运行的 PHP 强行说 root。 |
22 garrych 2018-05-18 09:12:13 +08:00 exec('git pull 2>&1', $output, $return_var); 这样执行试试,看看 git 会报出什么信息 |