2013-07-29 45 views
1

我写一个光纤部署获取运行为用户MyAppUser脚本(主机“[email protected]”,SSH密钥工作,所以不需要密码)的其他用户。其中一个步骤涉及将文件复制到/etc/init并更改权限,以便在将来部署MyAppUser可以覆盖该文件。面料须藤与root权限

MyAppUser不是一个sudoer。它也不应该。为了执行复制到/etc/init我需要提升权限...所以我坚持提示输入用户名的用户和执行:

​​

其中一期工程,但提示我要两次相同的密码。 (我am一个sudoer)。

这里

许多问题,但中央很少有:

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

回答

1

1:你说MyAppUser不在sudoers文件。所以它不能运行sudo。使用调试标志看到这一点,但你基本上是这样:

$ ssh [email protected] "sudo -u me 'sudo cp ...'" 

所以,如果MyAppUser不能须藤的话,那么面料作为连接这种使用不能须藤。如果您有多个用户可以连接到此计算机,请使用settings()上下文管理器或execute()函数,并在主机字符串中将我(请参阅提示的用户)作为要连接的用户。例如:

execute(setup_task, host="[email protected]") 

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

+0

这解决了我上面概述的问题。我最终做的是决定在设置我的远程服务器时,我将它作为一个先决条件,他们拥有他们将要写入的文件,然后使用'>'写入它。 – Crisfole