部署后在 Git 钩子中使用 sudo 设置权限

部署后在 Git 钩子中使用 sudo 设置权限

我在 Ubuntu 上运行了一些网站,并且正在设置一个新的部署工作流程,如下所示(示例使用暂存环境):

在我的开发机器上,我执行git push staging推送到裸存储库并触发post-receive钩子的操作,该钩子执行以下操作:

  • 在单独的文件夹中检出项目
  • 备份当前部署的目录
  • 使用 rsync 部署文件
  • post_deploy.sh使用脚本设置适当的权限

除权限设置部分外,以上内容均运行良好。

因为我需要使用sudo来做chgrpchown,所以我尝试将以下内容添加到/etc/sudoers

myusername ALL=(ALL:ALL) NOPASSWD: /path/to/post_deploy.sh

但是执行时git push出现此错误:

remote: sudo: no tty present and no askpass program specified

如果我post_deploy.sh直接从部署的服务器运行,则不会遇到任何问题。

我如何post_deploy.sh从 git hook 运行脚本?我不介意输入额外的密码,但据我所知,askpass 不适用于命令行(我是对的吗?)。

答案1

这是 /etc/sudoers 文件的问题,其中有以下条目:

Defaults requiretty

详细信息这个帖子

有两个选项,从 /etc/sudoers 中注释掉Defaults requiretty设置或使用伪 tty 分配(-t)参数ssh

在您的接收后脚本中尝试执行以下操作:

ssh -t 127.0.0.1 "sudo chown user /path/to/pushfile"

尽管您必须ssh为自己配置预共享密钥并手动运行一次以向已知主机添加条目(或找到忽略此项的参数)。

相关内容