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

Linux PHP 运行 shell_exec,无法 git

  •  
  •   sytnishizuiai · 9 天前 · 897 次点击

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

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

        1
    liuzhaowei55   9 天前 via iPhone
    看一下运行 php 的用户是哪个,是不是你放私钥的那个用户。
        2
    sytnishizuiai   9 天前
    @liuzhaowei55 都是 root
        3
    KomeijiSatori   9 天前
    报错了么
        4
    hteen   9 天前
    做钩子大多是走 ssh 协议, coding 里配置部署公钥

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

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

    composer require cpliakas/git-wrapper
        5
    sytnishizuiai   9 天前
    @KomeijiSatori 没报错,200 通过的
        6
    sytnishizuiai   9 天前
    @hteen 嗯 我已经走 ssh 了,公钥也配置好了,服务器里面可以直接 git 了,运行语句 linux 里面直接 php 运行没问题的,就是 web 内运行没效果。
    谢谢,我去试试。这功能其实好了也不准备上线,手动更新安全点,就是昨天搞了我一晚上,就是 git 过不了。。。
        7
    KomeijiSatori   9 天前
    @sytnishizuiai shell_exec("git xxxxx >> /tmp/git.log") 执行一次然后进 /tmp 看看
        8
    widdy   9 天前
    上面不都提过了,很显然是你 web 运行 php 的用户不对吧,www-data 和 root。你 ps 看一下,php 到底是哪个用户运行的。
        9
    haoliang   9 天前
    之前用 shell_exec, exec, system ... 也是碰到莫名其妙的问题,图省心后来就一直用 symfony/process
        10
    sytnishizuiai   9 天前
    @KomeijiSatori 空的
    @widdy 一个进程是 root,其他全是 www,昨天我把运行文件切个 www 用户,也没成功
        11
    nosay   9 天前
    很明显,你在 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   9 天前
    www 的公钥和 root 的公钥是不同的,如果 PHP 是以 www 用户运行,那 shell_exec 里的 git 用的就是 www 的公钥
        13
    wangzhi   9 天前
    权限不行
        14
    kttde   9 天前
    shell_exec 要带上用户名
    sudo -Hu root git pull 或者
    sudo -Hu www git pull
        15
    defunct9   9 天前
    开 ssh,让我上去试试
        16
    vex2   9 天前
    试试
    export GIT_SSH=/path/to/key
        17
    0x8C   9 天前
    echo shell_exec("whoami")
        18
    PHPJit   9 天前
    用 workerman 或者 swoole 吧,然后 pull 一下。
        19
    Sanko   9 天前 via Android
    路径问题吧
        20
    naiba   9 天前 via Android
    自动部署吗 试试 github.com/naiba/nocd 吧
        21
    msg7086   9 天前
    从第二楼开始就在瞎扯了。www 权限运行的 PHP 强行说 root。
        22
    garrych   8 天前
    exec('git pull 2>&1', $output, $return_var);
    这样执行试试,看看 git 会报出什么信息
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   鸣谢   ·   985 人在线   最高记录 3541   ·  
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.1 · 16ms · UTC 17:47 · PVG 01:47 · LAX 10:47 · JFK 13:47
    ♥ Do have faith in what you're doing.
    沪ICP备16043287号-1