Linux PHP 运行 shell_exec,无法 git - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
sytnishizuiai
V2EX    PHP

Linux PHP 运行 shell_exec,无法 git

  •  
  •   sytnishizuiai 2018-05-17 10:50:08 +08:00 4196 次点击
    这是一个创建于 2756 天前的主题,其中的信息可能已经有所发展或是发生改变。

    /t/455439 昨天发了帖子,coding 无法装钩子,所以就自己随便搞个试试,但发现通过 shell_exec,cd ls mdir 都可以运行,但 git pull 就是不行,我 git 已经公钥装好了 ,把命令在 linux 内直接可以运行,通过 web 却失败。

    后来试了网上的很多方法,免密码什么的,还是不行,有什好的方式吗?

    liuzhaowei55
        1
    liuzhaowei55  
       2018-05-17 10:58:15 +08:00 via iPhone
    看一下运行 php 的用户是哪个,是不是你放私钥的那个用户。
    sytnishizuiai
        2
    sytnishizuiai  
    OP
       2018-05-17 11:03:25 +08:00
    @liuzhaowei55 都是 root
    KomeijiSatori
        3
    KomeijiSatori  
       2018-05-17 11:04:23 +08:00
    报错了么
    hteen
        4
    hteen  
       2018-05-17 11:12:02 +08:00
    做钩子大多是走 ssh 协议, coding 里配置部署公钥

    之前用 docker 写钩子, 也是 ssh 权限的问题

    后来找了个包操作 Git, 挺方便的

    composer require cpliakas/git-wrapper
    sytnishizuiai
        5
    sytnishizuiai  
    OP
       2018-05-17 11:30:43 +08:00
    @KomeijiSatori 没报错,200 通过的
    sytnishizuiai
        6
    sytnishizuiai  
    OP
       2018-05-17 11:32:44 +08:00
    @hteen 嗯 我已经走 ssh 了,公钥也配置好了,服务器里面可以直接 git 了,运行语句 linux 里面直接 php 运行没问题的,就是 web 内运行没效果。
    谢谢,我去试试。这功能其实好了也不准备上线,手动更新安全点,就是昨天搞了我一晚上,就是 git 过不了。。。
    KomeijiSatori
        7
    KomeijiSatori  
       2018-05-17 11:54:29 +08:00
    @sytnishizuiai shell_exec("git xxxxx >> /tmp/git.log") 执行一次然后进 /tmp 看看
    widdy
        8
    widdy  
       2018-05-17 12:46:23 +08:00
    上面不都提过了,很显然是你 web 运行 php 的用户不对吧,www-data 和 root。你 ps 看一下,php 到底是哪个用户运行的。
    haoliang
        9
    haoliang  
       2018-05-17 12:48:39 +08:00
    之前用 shell_exec, exec, system ... 也是碰到莫名其妙的问题,图省心后来就一直用 symfony/process
    sytnishizuiai
        10
    sytnishizuiai  
    OP
       2018-05-17 13:24:31 +08:00
    @KomeijiSatori 空的
    @widdy 一个进程是 root,其他全是 www,昨天我把运行文件切个 www 用户,也没成功
    nosay
        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

    然后把生成的公钥部署上去,再试一下
    jfcherng
        12
    jfcherng  
       2018-05-17 13:34:18 +08:00
    www 的公钥和 root 的公钥是不同的,如果 PHP 是以 www 用户运行,那 shell_exec 里的 git 用的就是 www 的公钥
    wangzhi
        13
    wangzhi  
       2018-05-17 13:40:22 +08:00
    权限不行
    kttde
        14
    kttde  
       2018-05-17 13:42:36 +08:00
    shell_exec 要带上用户名
    sudo -Hu root git pull 或者
    sudo -Hu www git pull
    defunct9
        15
    defunct9  
       2018-05-17 16:59:04 +08:00
    开 ssh,让我上去试试
    vex2
        16
    vex2  
       2018-05-17 17:04:35 +08:00
    试试
    export GIT_SSH=/path/to/key
    0x8C
        17
    0x8C  
       2018-05-17 17:14:41 +08:00
    echo shell_exec("whoami")
    PHPJit
        18
    PHPJit  
       2018-05-17 17:17:52 +08:00
    用 workerman 或者 swoole 吧,然后 pull 一下。
    Sanko
        19
    Sanko  
       2018-05-17 17:20:57 +08:00 via Android
    路径问题吧
    naiba
        20
    naiba  
       2018-05-17 17:30:49 +08:00 via Android
    自动部署吗 试试 github.com/naiba/nocd
    msg7086
        21
    msg7086  
       2018-05-18 00:58:29 +08:00
    从第二楼开始就在瞎扯了。www 权限运行的 PHP 强行说 root。
    garrych
        22
    garrych  
       2018-05-18 09:12:13 +08:00
    exec('git pull 2>&1', $output, $return_var);
    这样执行试试,看看 git 会报出什么信息
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     1206 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 27ms UTC 23:46 PVG 07:46 LAX 15:46 JFK 18:46
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86