我使用 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"; }; }; };