3

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

[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

谁能告诉我如何在 Fabric 中向 sudo 命令添加路径变量?提前致谢。

4

2 回答 2

2
  1. 在以 root 身份运行时,始终提供可执行文件的完整路径应该是一种习惯,以避免将特洛伊木马推入您的 PATH。

  2. 设置环境变量 viaexport仅适用于当前shell 会话 - 这是由sudo. 一旦您的命令(export在本例中为 )被执行,shell 就会退出,并带上您的环境变量。下次执行时sudo,会设置一个新的 shell(具有默认环境),它对您以前的export.

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

  4. 可以设置/etc/sudoers为对 3) 进行例外处理,通过env_keep. 详情请参阅man sudoers。但是,请参阅 1) - 这不是一个好主意。

  5. 有一个-E选项 to sudo,它允许保留调用者的环境(包括例如一个扩展的PATH),但这需要SETENV/etc/sudoers. 再次,请参阅man sudoers详细信息,并注意 1)。

于 2012-11-19T11:49:55.313 回答
-1

利用

sudo('PATH=$PATH:/new/path/to/add/install/bin commad')
于 2015-11-28T12:49:32.853 回答