/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 会报出什么信息 |