1

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

1 回答 1

1

1:您说 MyAppUser 不在 sudoers 中。所以它不能运行 sudo。使用调试标志来查看这一点,但您实际上是在这样做:

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

因此,如果 MyAppUser 根本不能 sudo,那么作为这种用途的结构连接就不能 sudo。

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

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

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

于 2013-08-01T05:55:55.900 回答