将sudo作为具有root权限的另一个用户

时间:2013-07-29 17:27:45

标签: bash fabric

我正在编写一个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)。

这里有很多问题,但中心的几个是:

  1. 为什么sudo("sudo cp /home/myappuser/git/myapp/myapp.conf /etc/init", user='Me)没有按预期工作?看起来第一个sudo(由fabric运行)忽略了user
  2. 是否有更好的方法来执行需要root权限的命令作为另一个sudoer用户? (Bash问题,不是面料问题)。

1 个答案:

答案 0 :(得分:1)

1:你说MyAppUser不是sudoers。所以它无法运行sudo。使用debug标志来看这个,但你基本上是这样做的:

$ ssh MyAppUser@myapp.mycompany.com "sudo -u me 'sudo cp ...'"

因此,如果MyAppUser根本不能sudo,那么Fabric连接就不能用了sudo。

2:如果有多个用户能够连接到本机,请使用settings()上下文管理器或execute()函数,并在主机字符串中作为要连接的用户提供给我(请参阅提示用户)。例如:

execute(setup_task, host="me@myapp.mycompany.com")

其中setup_task是执行复制到init目录的任务。