我正在编写一个以用户身份运行的 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 (由织物运行)正在忽略user
. - 作为另一个 sudoer 用户,是否有更好的方法来执行需要 root 权限的命令?(一个 Bash 问题,而不是一个结构问题)。