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