在生产服务器上配置 sudo 永久继承代理环境变量

本文介绍在生产服务器上确保 sudo 命令继承代理环境变量的三种方法:临时使用 sudo -E、通过 visudo 在 sudoers 中添加 Defaults env_keep,以及为多用户环境创建 /etc/sudoenv 并在 sudoers 中配置 env_file,从而实现永久保留 http_proxy、https_proxy 和 no_proxy 设置。
2025-11-25
919 字 · 约 3 分钟阅读

在生产服务器上,通常会采用 sudo 进行 root 授权,但 sudo 不继承环境变量,导致某些命令无法执行,尤其是涉及到一些要代理的场景。

所以在使用 sudo 执行命令时,可以使用 -E 参数来保留环境变量,例如:

sudo -E some_command

但这种方法是临时使用,要让 sudo 永久继承环境变量,可以修改 sudoers 文件:

sudo visudo

然后添加以下行:

Defaults env_keep += "http_proxy https_proxy no_proxy"

这样就可以继承代理相关的环境变量,确保在使用 sudo 执行命令时,代理设置依然有效。

这种方法仍然要求用户本身已经配置了相应的环境变量,例如:

export http_proxy="http://example.com:8080"
export https_proxy="http://example.com:8080"
export no_proxy="localhost,127.0.0.1"

生产服务器上的代理通常是固定的,如果是多用户的环境,则非常麻烦,可以考虑将代理写入 /etc/sudoenv 文件中:

echo 'export http_proxy="http://example.com:8080"' | sudo tee -a /etc/sudoenv
echo 'export https_proxy="http://example.com:8080"' | sudo tee -a /etc/sudoenv
echo 'export no_proxy="localhost,127.0.0.1"' | sudo tee -a /etc/sudoenv

然后在 sudoers 文件中添加:

Defaults env_keep += "http_proxy https_proxy no_proxy"
Defaults env_reset
Defaults env_file=/etc/sudoenv

这样在执行 sudo 命令时,就会自动加载 /etc/sudoenv 中的环境变量,实现永久继承代理设置。

留言

发表留言