【问题标题】:how to do sudo -E ..... in fabric?如何在织物中做 sudo -E .....?
【发布时间】:2013-02-10 20:22:19
【问题描述】:

我有一个当前使用如下命令的结构脚本:

sudo('pip install virtualenv --upgrade --use-mirrors')

我想知道的是如何通过 sudo 的 -E 选项来运行它?

sudo -E pip install virtualenv --upgrade --use-mirrors

编辑:

试过这个:

sudo('pip install virtualenv --upgrade --use-mirrors, -E')

但这似乎传递了 pip install 而不是 sudo 的选项

编辑 2:

env.sudo_prefix = "sudo -E -S -p '%(sudo_prompt)s'"

给我一​​个 TypreError: format requires a mapping

编辑 3:

env.sudo_prefix = "sudo -E -S -p '%(sudo_prompt)s'" % env

给了我一个 TypreError: 不是所有的参数都在字符串格式化过程中被转换

【问题讨论】:

  • 你能试试吗:env.sudo_prefix = "sudo -E -S -p '%s' "
  • 运行但似乎没有覆盖原来的 sudo_prefix,它让我回到原来的错误,运行 pip 安装代码时返回错误 1

标签: python ubuntu pip fabric


【解决方案1】:

来自织物源文件。 sudo 方法签名如下:

def sudo(command, shell=True, pty=True, combine_stderr=None, user=None,
    quiet=False, warn_only=False, stdout=None, stderr=None, group=None,
    timeout=None):

所提供的示例没有显示任何此类情况(令人惊讶),否则我会打赌。

sudo("~/install_script.py")
        sudo("mkdir /var/www/new_docroot", user="www-data")
        sudo("ls /home/jdoe", user=1001)
        result = sudo("ls /tmp/")
        with settings(sudo_user='mysql'):
            sudo("whoami") # prints 'mysql'

我建议您提供用户密钥。

看看这张开票:

https://github.com/fabric/fabric/issues/503

你试过用 run() 运行你的命令

run('sudo -E pip install virtualenv --upgrade --use-mirrors')

【讨论】:

  • 我也找到了sudo_prefix,但还没有工作
  • run('sudo -E pip install virtualenv --upgrade --use-mirrors') 似乎可以在我的主机上运行,​​但是当我从我的 'ubuntu-server' 虚拟机运行它时,它会返回错误代码 1
  • env.sudo_prefix = "sudo -E -S -p '%(sudo_prompt)s' " % env
【解决方案2】:

这是一个非常糟糕的主意,它会迫使您存储密码明文等。正确的做法是运行

$ sudo visudo

并配置 sudo 以允许您的用户在不提示输入密码的情况下运行 pip。

否则你会产生许多安全问题。

【讨论】:

  • 我当前运行它的方式我使用:sudo('pip install virtualenv --upgrade --use-mirrors') 只要求用户在第一次输入他们的密码并且不编码在密码中
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-04
  • 1970-01-01
  • 2021-11-11
  • 1970-01-01
  • 2021-02-16
  • 2017-07-21
相关资源
最近更新 更多