通过 sudo 调用代理使 aptitude 正常工作

通过 sudo 调用代理使 aptitude 正常工作

我使用 Debian 6。我使用代理,因此我将 Debian 配置为使用该代理。通过 GUI 进行浏览和任何 HTTP 和 FTP 活动均正常。

我想更新我的软件包存储库因此我在 shell 中输入了:

sudo aptitude

然后,如果我尝试更新 repo(按'u'),aptitude 在尝试访问 debian 的 FTP 服务器时会停止,并且此操作最终会超时。

但如果它尝试:

$ su
# aptitude

更新作品。

两次调用有什么区别?$http_proxy$ftp_proxy环境变量在两个 shell 中都存在。

答案1

命令以 root 身份启动另一个 shell(如果您提供了用户名和正确的密码,则可以是其他用户)。此 shell 获取所有常规环境变量,当然包括 HTTP_PROXY 和 FTP_PROXY 变​​量。因此它可以正常工作。

须藤命令会删除除特别选择的子集之外的所有环境变量......当然,它不包括 HTTP_PROXY 和 FTP_PROXY 变​​量,因此您的命令会失败。

你(们)能做到须藤通过编辑 sudoers 配置文件来保留 *_PROXY 变​​量,使用维苏多命令(当然)。

添加以下内容将使须藤保留 HTTP_PROXY 和 FTP_PROXY 的值:

Defaults env_keep += "http_proxy ftp_proxy https_proxy HTTP_PROXY FTP_PROXY HTTPS_PROXY"

巧合的是,如果你将 DISPLAY 和 HOME 添加到该列表中,你也可以使用带有 sudo 的 gui 程序(它们需要 DISPLAY 变量来连接)

Defaults env_keep += "DISPLAY HOME"

您甚至可以只添加这两行,就像这样。(+=是这里的关键)请记住在文件末尾添加这些行,因为在前几行中它通常会设置'环境保持' 变量与直 '=',这将删除所有先前的值。

答案2

我自己也对此苦苦挣扎,最终采用了 Ask Ubuntu 上提出的解决方案: apt-get 无法与代理配合使用

如果设置http_proxy不起作用,请尝试编辑apt.conf。在
Ubuntu中apt.conf,它被分成了多个/etc/apt/apt.conf.d/目录。
在此目录中编辑/etc/apt/apt.conf.d/01ubuntu

APT {
  Acquire {
      http {
          Proxy "http://user:password@server:port";
      };
  };
};

相关内容