WSL 上的 `http_proxy` 未与 `printenv` 一起显示

WSL 上的 `http_proxy` 未与 `printenv` 一起显示

我无法让 pip 在公司防火墙后面工作。我将 http 和 https 代理添加到我的/etc/environment文件中,如果我执行echo "$HTTP_PROXY"它,它会打印正确的内容。但是,如果我执行env或,则printenv不会显示任何代理变量。我认为这pip也是失败的原因。任何见解都将不胜感激。我的/etc/environment文件看起来像

PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games"
http_proxy="http://<stuff>.<stuff>.org:80"
HTTP_PROXY="http://<stuff>.<stuff>.org:80"
https_proxy="https://<stuff>.<stuff>.org:443"
HTTPS_PROXY="https://<stuff>.<stuff>.org:443"

我也将同样的行添加到我的~/.bashrc文件中。

答案1

WSL 在启动 shell(无论是否登录)时不使用 PAM 堆栈,因此基于 PAM 的操作会失败:

  • /etc/environment并且~/.pam_environment,阅读pam_env,不适用(WSL #1405
  • pam_umask未设置默认 umask (WSL #352
  • 限制来自pam_limitsWSL #1576

具体来说,对于环境设置,最简单的方法可能是将它们添加到.profile(如果运行登录 shell)或.bashrc,使用export


总的来说,似乎没有简单的解决方案。

您可以以您的用户身份再次登录:

sudo -iu "$USER"
su - "$USER"

/etc/pam.d/sudo这些应该分别在或中加载 PAM 配置/etc/pam.d/su。但它们彼此略有不同,也与/etc/pam.d/sshd或不同/etc/pam.d/lightdm,因此并非所有内容都与您通过 GUI 或 SSH 登录实际 Ubuntu 系统时相同。

(和sudo都会su要求输入密码,但都可以配置为不要求输入密码。)

答案2

您遇到的问题是由于“bash 没有获取 /etc/environment”在 WSL 中。我偶然发现了这个问题,它很讨厌。更讨厌的是,这是一个 7 年前的问题,截至撰写本文时,仍未解决。我将从这个问题中复制我的解决方法,供任何人参考:


庆祝

相关内容