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

我在Ubuntu上运行了几个站点,并按照如下方式设置了一个新的部署工作stream程(该示例使用了登台环境):

在我的开发机器上,我做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 ,我没有任何问题。

我怎样才能从git钩子运行post_deploy.sh脚本? 我不介意input一个额外的密码,但是从我读的askpass的东西不是命令行(我是吗?)。

这是/ etc / sudoers文件中的一个问题,它具有以下条目:

Defaults requiretty

在这篇文章中有详细介绍

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

在您的收到后脚本中尝试以下内容:

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

虽然你将不得不为自己configurationssh预共享密钥,并手动运行一次以向已知主机添加条目(或者find忽略此参数的参数)。