当我尝试使用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命令添加路径变量吗?提前谢谢。
答案 0 :(得分:2)
当以root用户身份运行时,应始终提供可执行文件的完整路径,以避免将特洛伊木马推入您的路径中。
通过export
设置环境变量仅适用于当前 shell会话 - 这是sudo
调用的会话。执行命令(在这种情况下为export
)后,shell将退出,并使用它获取环境变量。下次执行sudo
时,会设置一个新的shell(使用默认环境),它对您以前的export
一无所知。
配置文件/etc/sudoers
通常包含Defaults env_reset
之类的条目,其效果是调用环境中设置的环境变量不已复制到sudo
调用的环境中,因此在当前环境中调用export
而然后执行sudo
也无效。这是出于安全原因(参考文献1)在上面完成的。
可以通过/etc/sudoers
设置env_keep
以对3进行例外处理。有关详细信息,请参阅man sudoers
。但是,请参阅1) -
-E
有sudo
个选项,可以保留来电者的环境(包括例如扩展PATH
),但这需要SETENV
在/etc/sudoers
中设置。同样,请参阅man sudoers
了解详细信息,并注意1)。
答案 1 :(得分:-1)
使用
sudo('PATH=$PATH:/new/path/to/add/install/bin commad')