【发布时间】:2013-07-29 17:27:44
【问题描述】:
我正在编写一个 Fabric 部署脚本,该脚本以用户 MyAppUser 的身份运行(主机“MyAppUser@myapp.mycompany.com”,ssh 密钥有效,因此不需要密码)。其中一个步骤涉及将文件复制到 /etc/init 并更改权限,以便将来部署 MyAppUser 可以覆盖该文件。
MyAppUser 不是 sudoer。也不应该。为了将副本执行到/etc/init,我需要提升权限...所以我一直提示用户输入用户名并执行:
run('su %s -c "sudo cp /home/myappuser/git/myapp/myapp.conf /etc/init"')
这可行,但会提示我两次输入相同的密码。 (我是一个sudoer)。
这里有很多问题,但核心的几个问题是:
- 为什么
sudo("sudo cp /home/myappuser/git/myapp/myapp.conf /etc/init", user='Me)不能按预期工作?看起来第一个 sudo(由 fabric 运行)忽略了user。 - 有没有更好的方法来以另一个 sudoer 用户的身份执行需要 root 权限的命令? (一个 Bash 问题,而不是一个结构问题)。
【问题讨论】: