Path 如何向Fabric中的sudo添加路径变量

Path 如何向Fabric中的sudo添加路径变量,path,fabric,Path,Fabric,当我尝试使用fabric使用fabric远程部署Apache服务器时,遇到了一个问题。我尝试先使用sudo()向path变量添加一个新路径,然后也尝试使用sudo()回显$path。但是,我发现新路径似乎根本没有添加到路径中。因此,我无法通过sudo()执行该路径中的bin 有人能告诉我如何在Fabric中向sudo命令添加路径变量吗?提前谢谢 当以root用户身份运行时,应始终提供可执行文件的完整路径,以避免特洛伊木马被推送到您的路径中 通过export设置环境变量仅适用于当前shell会话,

当我尝试使用fabric使用fabric远程部署Apache服务器时,遇到了一个问题。我尝试先使用sudo()向path变量添加一个新路径,然后也尝试使用sudo()回显$path。但是,我发现新路径似乎根本没有添加到路径中。因此,我无法通过sudo()执行该路径中的bin

有人能告诉我如何在Fabric中向sudo命令添加路径变量吗?提前谢谢

  • 当以root用户身份运行时,应始终提供可执行文件的完整路径,以避免特洛伊木马被推送到您的路径中

  • 通过
    export
    设置环境变量仅适用于当前shell会话,该会话由
    sudo
    调用。一旦您的命令(
    export
    ,在本例中)被执行,shell将退出,并将您的环境变量带到其中。下次执行
    sudo
    时,将设置一个新的shell(使用默认环境),它不知道以前的
    导出

  • 配置文件
    /etc/sudoers
    通常包含一个类似
    Defaults env_reset
    的条目,其效果是调用环境中设置的环境变量不会复制到
    sudo
    调用的环境中,因此,在当前环境中调用
    export
    ,然后执行
    sudo
    也不起作用。这样做是出于安全原因(参考文献1)

  • 可以通过
    env_keep
    设置
    /etc/sudoers
    以对3)进行例外设置。有关详细信息,请参阅
    man sudoers
    。但是,请参见1)-这不是一个好主意

  • sudo
    -E
    选项,允许保留调用方的环境(包括扩展的
    路径
    ),但这需要在
    /etc/sudoers
    中设置
    SETENV
    。同样,有关详细信息,请参阅
    man sudoers
    ,并注意1)

  • 使用

    sudo('PATH=$PATH:/new/PATH/to/add/install/bin commad')
    
    有趣的是,我添加了类似的默认值!环境重置
    到sudoer文件。当我登录到远程服务器并尝试使用sudo执行命令时,它工作正常。问题是,当我远程使用Fabric做同样的事情时,它不起作用。看起来Fabric重置了路径,路径是wierd。@byteocean:好的。。。这方面我帮不了你,因为我没有使用Fabric的经验。虽然这段代码可以回答这个问题,但最好包含一些上下文,解释它是如何工作的以及何时使用它。从长远来看,只使用代码的答案是没有用的。在限制通过sudo运行shell的环境中,它也可能不适用于shell=False
    [name@IP:port] Executing task 'reboot'
    [name@IP:port] sudo: export PATH=$PATH:/new/path/to/add/install/bin
    [name@IP:port] out: sudo password: 
    
    [name@IP:port] sudo: echo $PATH
    [name@IP:port] out: sudo password:
    [name@IP:port] out: /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin