关于GitHub工作流中在www-data所属文件夹执行git pull的权限配置咨询
GitHub工作流中在www-data所属文件夹执行git pull的权限配置咨询
嘿,看你的Workflow配置,应该是碰到了用SSH用户(你提到的g...)在/var/www/html(归属www-data)目录执行git操作时的权限问题对吧?我给你几个实用的解决方向:
1. 调整目录权限与用户组
最直接的是让你的SSH用户拥有该目录的操作权限:
- 先把SSH用户加入www-data用户组:
usermod -aG www-data [你的SSH用户名] - 然后修改
/var/www/html的组权限,确保组内用户有读写执行权限:chmod -R g+rwx /var/www/html - 别忘同步
.git目录的权限,不然git命令还是会卡壳:
改完之后,你的SSH用户就能正常在该目录执行git操作了。chown -R :www-data /var/www/html/.git chmod -R g+rwx /var/www/html/.git
2. 用sudo切换到www-data执行命令
如果不想改目录权限,可以通过sudo切换身份执行git命令:
- 先给你的SSH用户配置免密sudo权限(编辑
/etc/sudoers或者在/etc/sudoers.d/下新增配置文件):[你的SSH用户名] ALL=(www-data) NOPASSWD: /usr/bin/git, /usr/bin/docker, /usr/bin/docker-compose - 然后把Workflow脚本里的git命令改成以www-data身份执行:
这样就能绕开权限问题,同时不用动目录的原有权限设置。sudo -u www-data git reset --hard sudo -u www-data git fetch --all sudo -u www-data git pull
3. 不推荐的方案:用www-data作为SSH用户
虽然可以直接把SSH_USERNAME改成www-data,但这会带来安全风险——www-data是web服务的运行用户,给它开放SSH登录权限会扩大攻击面,完全不建议这么做。
另外,看你Workflow里的git diff判断行,用了"转义双引号,在实际执行时可能会出问题,建议改成Workflow里支持的转义方式:
if [ -n "$(git diff --name-only ${{ github.sha }} HEAD -- .docker docker-compose.yml)" ]; then
最后再确认下:你的SSH私钥对应的公钥已经加到目标服务器该用户的~/.ssh/authorized_keys里了吧?这是SSH连接的基础配置,没弄好的话第一步就卡壳了。
备注:内容来源于stack exchange,提问作者Bird87 ZA
相关产品推荐
相关产品推荐

