V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
sytnishizuiai
V2EX  ›  PHP

Linux PHP 运行 shell_exec,无法 git

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

    /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   ·   实用小工具   ·   1052 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 20:00 · PVG 04:00 · LAX 12:00 · JFK 15:00
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.